鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列

在我们鸿蒙APP开发中,经常需要使用到一些图表的开发,本文主要介绍使用 McCharts 框架绘制柱状图的方法

配套指导视频地址:鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili

1. 第三方库介绍

1.1. McCharts

McCharts(莓创图表)是McUI提供的一款开箱即用的图表工具库,专为Harmony OS的所有类型的开发人员而设计。该组件库目前支持折线图柱状图饼图散点图

McCharts是一个基于ArkTS语法封装的图表组件,你可以运行在ArkTS 3+版本(DevEco Studio 3.1.1+)以上的任意版本当中。

1.2. 我们选择McCharts

  • McCharts是一款自研开发的公共组件,基于ArkTS最新版本。意味着HarmonyOS的新特性我们都支持,并拥有一个庞大的社区,您将拥有所有创建和制作项目的帮助和文档。

  • 每个组件都是独立化的,更好地避免导入不必要的代码

  • 所有开发者拥有创建、改进和纠正任何组件或功能的开源社区

  • 提供了配套的设计资源,充分满足可定制化的需求。

1.3. 官网地址

Welcome to nginx!

2. 安装

McCharts已经使用OpenHarmony三方库进行托管,你可以使用OpenHarmony提供的ohpm工具安装McCharts。在DevEco Studio中,您可以在Terminal(命令行窗口)输入如下的指令进行安装。

ohpm install @mcui/mccharts

安装完毕之后,可以检查oh-package.json5文件中是否已经添加了mccharts的依赖。如下图所示:

image-20241209203934995

3. 绘制折线图

3.1. 新建空白页面:

@Entry
@Component
struct LineCharts {
  build() {
    Column() {
    }
    .height('100%')
    .width('100%')
  }
}

3.2. 创建Options类

Options类中,我们可以通过属性来设置折线图的样式,如设置图例的相关样式与功能,设置提示层的相关样式与功能,设置X轴的相关样式与功能,设置Y轴的相关样式与功能,设置折线区的相关样式与功能。具体代码如下所示:

import { McLineChart, Options } from '@mcui/mccharts'//注意不要导入错误的包了,这个是正确的引入代码
​
@State defOptions: Options = new Options({
    xAxis: {
      //设置X轴的相关样式与功能
      data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    yAxis: {
      //设置Y轴的相关样式与功能
      name: '温度'
    },
    series: [//设置折线区的相关样式与功能
      {
        name: '周最高气温',
        data: [11, 5, 9, 13, 12, 12, 5]
      },
      {
        name: '周最低气温',
        data: [3, 0, 3, 5, 4, 2, 2]
      }
    ]
  })

3.3. 添加折线组件

//添加折线图组件
McLineChart({ options: this.defOptions }).height('60%')

3.4. 页面效果

image-20241209204613357

代码截图如下:

image-20241209204715227

3.5. 美化

上面是一个最简单的版本,我们还可以参考官网,对X轴和Y轴及其他地方,做一些美化设置,设置完毕后,折线图最终页面如下图所示:

image-20241209204140909

最终完整代码如下:

import { McLineChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 折线图-案例页面
 */
@Entry
@Component
struct LineCharts {
  @State message: string = 'Hello World';
  @State defOptions: Options = new Options({
    //设置图例的相关样式与功能
    legend: {
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#ff000000', //字体颜色
        fontSize: 40, //字体大小
        fontWeight: '500' //字体粗细
      }
    },
    //设置X轴的相关样式与功能
    xAxis: {
      axisLabel: {
        color: '#ff838383', //X轴字体颜色
        fontSize: 28, //X轴字体大小
        fontWeight: '600' //X轴字体粗线
      },
      axisTick: {
        //刻度线配置
        show: true, //控制刻度线显示与隐藏
        length: 6, // 刻度线的长度
        interval: 4, //刻度线与文本的间隔
        lineStyle: {
          color: '#ff838383', //X轴刻度线颜色
          width: 1 //X轴线刻度线宽度
        }
      },
      axisLine: {
        //x轴线配置
        show: true, //控制轴线显示与隐藏 可选值-true显示 false-隐藏
        lineStyle: {
          color: '#ff838383', //X轴线条颜色
          width: 1, //X轴线宽度
          type: 'solid' //X轴线类型
        }
      },
      data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    //设置Y轴的相关样式与功能
    yAxis: {
      name: '温度',
      axisTick: {
        //刻度线配置
        length: 6, //刻度的长度
        lineStyle: {
          //刻度线样式
          color: '#ff838383', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //y轴线配置
        show: true //隐藏y轴线
      },
      splitLine: {
        // Y轴分割线配置。
        show: true, //显示分割线
        lineStyle: {
          //轴线样式
          color: '#ffe5e5e5', //线颜色
          width: 1 //线宽度
        }
      },
      axisLabel: {
        //y轴文本标签样式配置
        color: '#ff838383', //字体颜色
        fontSize: 35, //字体大小
        fontWeight: '500' //字体粗细
      },
    },
    //设置折线区的相关样式与功能
    series: [
      {
        name: "周最高气温", //图例文字
        color: '#ffff0002', //图例颜色
        lineStyle: {
          //折线样式配置
          width: 2, //折线宽度
          color: '#ffff0002' //折线显色
        },
        itemStyle: {
          //折线拐点配置
          symbol: 'solidCircle', //拐点类型
          symbolSize: 4 //拐点大小
        },
        data: [11, 5, 9, 13, 12, 12, 5] //数据
      },
      {
        name: "周最低气温", //图例文字
        color: '#52C41A', //图例颜色
        lineStyle: {
          width: 2, //折线宽度
          color: '#52C41A' //折线显色
        },
        itemStyle: {
          //折线拐点配置
          symbol: 'solidCircle', //拐点类型
          symbolSize: 4 //拐点大小
        },
        data: [3, 0, 3, 5, 4, 2, 2] //数据
      }
    ],
    tooltip: {
      //设置提示层的相关样式与功能
      axisPointer: {
        //指示器配置项
        type: 'line', //指示器类型
        lineStyle: {
          //提示线样式
          color: '#D9D9D9', //线颜色
          width: 2, //线宽度
          type: 'solid' //线类型
        }
      },
      backgroundColor: '#FFFFFF', //提示框背景颜色
      borderColor: '#C4C4C4', //提示框边框颜色
      borderWidth: 1, //提示框边框宽度
      padding: 6, //提示框内边距
      textStyle: {
        //文本样式配置
        color: '#666666', //字体颜色
        fontSize: 14 //字体大小
      }
    },
  })
​
  build() {
    Column() {
      //折线图组件
      McLineChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

3.6. 单折线图

效果如下图所示:

image-20241209212829817

代码:

import { McLineChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 单折线图-案例页面
 */
@Entry
@Component
struct SingleLineCharts {
  @State defOptions: Options = new Options({
    //设置图例的相关样式与功能
    legend: {
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#ff000000', //字体颜色
        fontSize: 40, //字体大小
        fontWeight: '500' //字体粗细
      }
    },
    //设置X轴的相关样式与功能
    xAxis: {
      axisLabel: {
        color: '#ff838383', //X轴字体颜色
        fontSize: 28, //X轴字体大小
        fontWeight: '600' //X轴字体粗线
      },
      axisTick: {
        //刻度线配置
        show: true, //控制刻度线显示与隐藏
        length: 6, // 刻度线的长度
        interval: 4, //刻度线与文本的间隔
        lineStyle: {
          color: '#ff838383', //X轴刻度线颜色
          width: 1 //X轴线刻度线宽度
        }
      },
      axisLine: {
        //x轴线配置
        show: true, //控制轴线显示与隐藏 可选值-true显示 false-隐藏
        lineStyle: {
          color: '#ff838383', //X轴线条颜色
          width: 1, //X轴线宽度
          type: 'solid' //X轴线类型
        }
      },
      data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    //设置Y轴的相关样式与功能
    yAxis: {
      name: '人民币(万元)',
      axisTick: {
        //刻度线配置
        length: 6, //刻度的长度
        lineStyle: {
          //刻度线样式
          color: '#ff838383', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //y轴线配置
        show: true //隐藏y轴线
      },
      splitLine: {
        // Y轴分割线配置。
        show: true, //显示分割线
        lineStyle: {
          //轴线样式
          color: '#ffe5e5e5', //线颜色
          width: 1 //线宽度
        }
      },
      axisLabel: {
        //y轴文本标签样式配置
        color: '#ff838383', //字体颜色
        fontSize: 35, //字体大小
        fontWeight: '500' //字体粗细
      },
    },
    //设置折线区的相关样式与功能
    series: [
      {
        name: "每周销售额", //图例文字
        color: '#ffff0000', //图例颜色
        lineStyle: {
          width: 2, //折线宽度
          color: '#ffff0000' //折线显色
        },
        itemStyle: {
          //折线拐点配置
          symbol: 'ffff0000', //拐点类型
          symbolSize: 4 //拐点大小
        },
        data: [123.36, 102.36, 189.23, 98.59, 110.25, 114.95, 131.25] //数据
      }
    ],
    tooltip: {
      //设置提示层的相关样式与功能
      axisPointer: {
        //指示器配置项
        type: 'line', //指示器类型
        lineStyle: {
          //提示线样式
          color: '#D9D9D9', //线颜色
          width: 2, //线宽度
          type: 'solid' //线类型
        }
      },
      backgroundColor: '#FFFFFF', //提示框背景颜色
      borderColor: '#C4C4C4', //提示框边框颜色
      borderWidth: 1, //提示框边框宽度
      padding: 6, //提示框内边距
      textStyle: {
        //文本样式配置
        color: '#666666', //字体颜色
        fontSize: 14 //字体大小
      }
    },
  })
​
  build() {
    Column() {
      //折线图组件
      McLineChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

4. 绘制饼状图

4.1. 实心饼状图

效果图:

image-20241209210311095

代码如下:

import { McPieChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 饼状图-案例页面
 */
@Entry
@Component
struct PieCharts {
  @State message: string = 'Hello World';
  @State defOptions: Options = new Options({
    //调色盘颜色列表
    color: ['#FAAD14', '#3C73FF', '#52C41A', '#FF4D4F'],
    //设置图例的相关样式与功能
    legend: {
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#ff00b4ff', //字体颜色
        fontSize: 30, //字体大小
        fontWeight: '800' //字体粗细
      }
    },
    // title: {
    //   show: true,
    //   text: '最受欢迎语言', // 主标题文本
    //   subtext: '占比', // 副标题文本
    //   top: '30%',
    // },
    series: [
      {
        // radius: ['45%', '30%'], // 饼图外半径、内半径
        center: ['50%', '30%'], // 饼图中心位置
        data: [
          { name: 'Java', value: 201 },
          { name: '鸿蒙', value: 638 },
          { name: 'Python', value: 256 },
          { name: '人工智能', value: 159 },
        ],
        labelLine: {
          //文本连接线样式配置
          length: 10, //连接线1的长度
          length2: 30, //连接线2的长度
          lineStyle: {
            //提示线样式
            width: 1, //线宽度
            color: '#ffff0000' //线颜色
          }
        },
        label: {
          //系列文本标签样式配置
          show: true, //是否显示文本标签
          fontWeight: '800', //字体粗细
          fontFamily: 'sans-serif',
          color: '#ffffffff', //字体颜色
          position: 'outside', //文本显示位置
          fontSize: 30, //字体大小
          distanceToLabelLine: 6 //字体与饼状间距
        },
      }
    ],
    tooltip: {
      //设置提示层的相关样式与功能
      axisPointer: {
        //指示器配置项
        type: 'line', //指示器类型
        lineStyle: {
          //提示线样式
          color: '#D9D9D9', //线颜色
          width: 2, //线宽度
          type: 'solid' //线类型
        }
      },
      backgroundColor: '#FFFFFF', //提示框背景颜色
      borderColor: '#C4C4C4', //提示框边框颜色
      borderWidth: 1, //提示框边框宽度
      padding: 6, //提示框内边距
      textStyle: {
        //文本样式配置
        color: '#666666', //字体颜色
        fontSize: 14 //字体大小
      }
    },
  })
​
  build() {
    Column() {
      //饼状图组件
      McPieChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

4.2. 空心饼状图

效果图:

image-20241209210353231

代码如下:

import { McPieChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 饼状图-案例页面
 */
@Entry
@Component
struct PieCharts {
  @State message: string = 'Hello World';
  @State defOptions: Options = new Options({
    //调色盘颜色列表
    color: ['#FAAD14', '#3C73FF', '#52C41A', '#FF4D4F'],
    //设置图例的相关样式与功能
    legend: {
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#ff00b4ff', //字体颜色
        fontSize: 30, //字体大小
        fontWeight: '800' //字体粗细
      }
    },
    title: {
      show: true,
      text: '最受欢迎语言', // 主标题文本
      subtext: '占比', // 副标题文本
      top: '30%',
    },
    series: [
      {
        radius: ['45%', '30%'], // 饼图外半径、内半径
        center: ['50%', '30%'], // 饼图中心位置
        data: [
          { name: 'Java', value: 201 },
          { name: '鸿蒙', value: 638 },
          { name: 'Python', value: 256 },
          { name: '人工智能', value: 159 },
        ],
        labelLine: {
          //文本连接线样式配置
          length: 10, //连接线1的长度
          length2: 30, //连接线2的长度
          lineStyle: {
            //提示线样式
            width: 1, //线宽度
            color: '#ffff0000' //线颜色
          }
        },
        label: {
          //系列文本标签样式配置
          show: true, //是否显示文本标签
          fontWeight: '800', //字体粗细
          fontFamily: 'sans-serif',
          color: '#ffffffff', //字体颜色
          position: 'outside', //文本显示位置
          fontSize: 30, //字体大小
          distanceToLabelLine: 6 //字体与饼状间距
        },
      }
    ]
  })
​
  build() {
    Column() {
      //饼状图组件
      McPieChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

5. 绘制柱状图

5.1. 双柱

效果图如下所示:

image-20241209211622608

代码如下:

import { McBarChart, McPieChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 柱状图-案例页面
 */
@Entry
@Component
struct BarCharts {
  @State message: string = 'Hello World';
  @State defOptions: Options = new Options({
    legend: {
      //设置图例的相关样式与功能
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#ffff0000', //字体颜色
        fontSize: 30, //字体大小
        fontWeight: '800' //字体粗细
      }
    },
    yAxis: {
      //设置y轴的相关样式与功能
      name: '美元',
      axisTick: {
        //刻度线配置
        length: 6, //刻度的长度
        lineStyle: {
          //刻度线样式
          color: '#FFFFFF', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //y轴线配置
        show: true //隐藏y轴线
      },
      splitLine: {
        // Y轴分割线配置。
        show: true, //显示分割线
        lineStyle: {
          //轴线样式
          color: '#D9D9D9', //线颜色
          width: 1 //线宽度
        }
      },
      axisLabel: {
        //y轴文本标签样式配置
        color: '#999999', //字体颜色
        fontSize: 28, //字体大小
        fontWeight: '600' //字体粗细
      },
    },
    xAxis: {
      axisLabel: {
        //X轴文本标签样式配置
        color: '#999999', //字体颜色
        fontSize: 28, //字体大小
        fontWeight: '600' //字体粗线
      },
      axisTick: {
        //刻度线配置
        show: true, //控制刻度线显示与隐藏
        length: 6, // 刻度线的长度
        interval: 4, //刻度线与文本的间隔
        lineStyle: {
          //刻度线样式
          color: '#FFFFFF', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //x轴线配置
        show: true, //控制轴线显示与隐藏 可选值-true显示 false-隐藏
        lineStyle: {
          //轴线样式
          color: '#D9D9D9', //线颜色
          width: 1, //线宽度
          type: 'solid' //线类型
        }
      },
      //设置x轴的相关样式与功能
      data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    series: [//设置柱状区的相关样式与功能
      {
        label: {
          //系列文本标签样式配置
          show: true, //显示文本标签样
          color: '#FFFFFF', //字体颜色
          fontWeight: '600', //字体粗细
          fontFamily: 'sans-serif', //字体样式
          position: 'center', //文本显示位置
          fontSize: 22, //字体大小
          distanceToLabelLine: 5 //字体与柱状间距
        },
        name: "收入", //图例文字
        color: '#FAAD14', //图例颜色
        stack: '', //是否显示堆叠柱子
        barStyle: {
          //柱状样式配置
          width: 14, //柱子宽度
          color: '#FAAD14', //柱子颜色
          barGap: 1 //同系列之间的柱子间隙
        },
        data: [60, 50, 42, 75, 40, 60, 35] //数据
      },
      {
        label: {
          //系列文本标签样式配置
          show: true, //显示文本标签样
          color: '#FFFFFF', //字体颜色
          fontWeight: '600', //字体粗细
          fontFamily: 'sans-serif', //字体样式
          position: 'center', //文本显示位置
          fontSize: 22, //字体大小
          distanceToLabelLine: 5 //字体与柱状间距
        },
        name: "支出", //图例文字
        color: '#3C73FF', //图例颜色
        stack: '', //是否显示堆叠柱子
        barStyle: {
          //柱状样式配置
          width: 14, //柱子宽度
          color: '#3C73FF', //柱子颜色
          barGap: 1 //同系列之间的柱子间隙
        },
        data: [40, 55, 19, 9, 21, 15, 11] //数据
      }
    ],
    tooltip: {
      //设置提示层的相关样式与功能
      axisPointer: {
        //指示器配置项
        type: 'line', //指示器类型
        lineStyle: {
          //提示线样式
          color: '#D9D9D9', //线颜色
          width: 2, //线宽度
          type: 'solid' //线类型
        }
      },
      backgroundColor: '#FFFFFF', //提示框背景颜色
      borderColor: '#C4C4C4', //提示框边框颜色
      borderWidth: 1, //提示框边框宽度
      padding: 6, //提示框内边距
      textStyle: {
        //文本样式配置
        color: '#666666', //字体颜色
        fontSize: 14 //字体大小
      }
    },
  })
​
  build() {
    Column() {
      //柱状图组件
      McBarChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

5.2. 单柱

效果图如下所示:

image-20241209213125702

代码如下:

import { McBarChart, McPieChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 单柱状图-案例页面
 */
@Entry
@Component
struct SingleBarCharts {
  @State defOptions: Options = new Options({
    legend: {
      //设置图例的相关样式与功能
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#3C73FF', //字体颜色
        fontSize: 30, //字体大小
        fontWeight: '800' //字体粗细
      }
    },
    yAxis: {
      //设置y轴的相关样式与功能
      name: '人民币(万元)',
      axisTick: {
        //刻度线配置
        length: 6, //刻度的长度
        lineStyle: {
          //刻度线样式
          color: '#FFFFFF', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //y轴线配置
        show: true //隐藏y轴线
      },
      splitLine: {
        // Y轴分割线配置。
        show: true, //显示分割线
        lineStyle: {
          //轴线样式
          color: '#D9D9D9', //线颜色
          width: 1 //线宽度
        }
      },
      axisLabel: {
        //y轴文本标签样式配置
        color: '#999999', //字体颜色
        fontSize: 28, //字体大小
        fontWeight: '600' //字体粗细
      },
    },
    xAxis: {
      axisLabel: {
        //X轴文本标签样式配置
        color: '#999999', //字体颜色
        fontSize: 28, //字体大小
        fontWeight: '600' //字体粗线
      },
      axisTick: {
        //刻度线配置
        show: true, //控制刻度线显示与隐藏
        length: 6, // 刻度线的长度
        interval: 4, //刻度线与文本的间隔
        lineStyle: {
          //刻度线样式
          color: '#FFFFFF', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //x轴线配置
        show: true, //控制轴线显示与隐藏 可选值-true显示 false-隐藏
        lineStyle: {
          //轴线样式
          color: '#D9D9D9', //线颜色
          width: 1, //线宽度
          type: 'solid' //线类型
        }
      },
      //设置x轴的相关样式与功能
      data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    series: [//设置柱状区的相关样式与功能
      {
        label: {
          //系列文本标签样式配置
          show: true, //显示文本标签样
          color: '#FFFFFF', //字体颜色
          fontWeight: '600', //字体粗细
          fontFamily: 'sans-serif', //字体样式
          position: 'center', //文本显示位置
          fontSize: 22, //字体大小
          distanceToLabelLine: 5 //字体与柱状间距
        },
        name: "每周收入", //图例文字
        color: '#3C73FF', //图例颜色
        stack: '', //是否显示堆叠柱子
        barStyle: {
          //柱状样式配置
          width: 14, //柱子宽度
          color: '#3C73FF', //柱子颜色
          barGap: 1 //同系列之间的柱子间隙
        },
        data: [60, 50, 42, 75, 40, 60, 35] //数据
      },
    ],
    tooltip: {
      //设置提示层的相关样式与功能
      axisPointer: {
        //指示器配置项
        type: 'line', //指示器类型
        lineStyle: {
          //提示线样式
          color: '#D9D9D9', //线颜色
          width: 2, //线宽度
          type: 'solid' //线类型
        }
      },
      backgroundColor: '#FFFFFF', //提示框背景颜色
      borderColor: '#C4C4C4', //提示框边框颜色
      borderWidth: 1, //提示框边框宽度
      padding: 6, //提示框内边距
      textStyle: {
        //文本样式配置
        color: '#666666', //字体颜色
        fontSize: 14 //字体大小
      }
    },
  })
​
  build() {
    Column() {
      //柱状图组件
      McBarChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

5.1. 层叠柱

效果图如下所示:

image-20241209213845406

代码如下:

import { McBarChart, McPieChart, Options } from '@mcui/mccharts'
​
/**
 * Author: 波波老师(weixin:javabobo0513)
 * Desc: 层叠柱状图-案例页面
 */
@Entry
@Component
struct CengDieBarCharts {
  @State defOptions: Options = new Options({
    legend: {
      //设置图例的相关样式与功能
      top: '5%', //图例距离顶部侧位置
      itemWidth: 10, //图形的宽度
      itemHeight: 10, //图形的高度
      textStyle: {
        //文本样式配置
        color: '#ffff0000', //字体颜色
        fontSize: 30, //字体大小
        fontWeight: '800' //字体粗细
      }
    },
    yAxis: {
      //设置y轴的相关样式与功能
      name: '美元',
      axisTick: {
        //刻度线配置
        length: 6, //刻度的长度
        lineStyle: {
          //刻度线样式
          color: '#FFFFFF', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //y轴线配置
        show: true //隐藏y轴线
      },
      splitLine: {
        // Y轴分割线配置。
        show: true, //显示分割线
        lineStyle: {
          //轴线样式
          color: '#D9D9D9', //线颜色
          width: 1 //线宽度
        }
      },
      axisLabel: {
        //y轴文本标签样式配置
        color: '#999999', //字体颜色
        fontSize: 28, //字体大小
        fontWeight: '600' //字体粗细
      },
    },
    xAxis: {
      axisLabel: {
        //X轴文本标签样式配置
        color: '#999999', //字体颜色
        fontSize: 28, //字体大小
        fontWeight: '600' //字体粗线
      },
      axisTick: {
        //刻度线配置
        show: true, //控制刻度线显示与隐藏
        length: 6, // 刻度线的长度
        interval: 4, //刻度线与文本的间隔
        lineStyle: {
          //刻度线样式
          color: '#FFFFFF', //线颜色
          width: 1 //线宽度
        }
      },
      axisLine: {
        //x轴线配置
        show: true, //控制轴线显示与隐藏 可选值-true显示 false-隐藏
        lineStyle: {
          //轴线样式
          color: '#D9D9D9', //线颜色
          width: 1, //线宽度
          type: 'solid' //线类型
        }
      },
      //设置x轴的相关样式与功能
      data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    },
    series: [//设置柱状区的相关样式与功能
      {
        label: {
          //系列文本标签样式配置
          show: true, //显示文本标签样
          color: '#FFFFFF', //字体颜色
          fontWeight: '800', //字体粗细
          fontFamily: 'sans-serif', //字体样式
          position: 'center', //文本显示位置
          fontSize: 28, //字体大小
          distanceToLabelLine: 5 //字体与柱状间距
        },
        name: "收入", //图例文字
        color: '#FAAD14', //图例颜色
        stack: 'total', //是否显示堆叠柱子
        barStyle: {
          //柱状样式配置
          width: 14, //柱子宽度
          color: '#FAAD14', //柱子颜色
          barGap: 1 //同系列之间的柱子间隙
        },
        data: [60, 50, 42, 75, 40, 60, 35] //数据
      },
      {
        label: {
          //系列文本标签样式配置
          show: true, //显示文本标签样
          color: '#3C73FF', //字体颜色
          fontWeight: '800', //字体粗细
          fontFamily: 'sans-serif', //字体样式
          position: 'top', //文本显示位置
          fontSize: 28, //字体大小
          distanceToLabelLine: 3 //字体与柱状间距
        },
        name: "支出", //图例文字
        color: '#3C73FF', //图例颜色
        stack: 'total', //是否显示堆叠柱子
        barStyle: {
          //柱状样式配置
          width: 14, //柱子宽度
          color: '#3C73FF', //柱子颜色
          barGap: 1 //同系列之间的柱子间隙
        },
        data: [40, 55, 19, 9, 21, 15, 11] //数据
      }
    ],
    tooltip: {
      //设置提示层的相关样式与功能
      axisPointer: {
        //指示器配置项
        type: 'line', //指示器类型
        lineStyle: {
          //提示线样式
          color: '#D9D9D9', //线颜色
          width: 2, //线宽度
          type: 'solid' //线类型
        }
      },
      backgroundColor: '#FFFFFF', //提示框背景颜色
      borderColor: '#C4C4C4', //提示框边框颜色
      borderWidth: 1, //提示框边框宽度
      padding: 6, //提示框内边距
      textStyle: {
        //文本样式配置
        color: '#666666', //字体颜色
        fontSize: 14 //字体大小
      }
    },
  })
​
  build() {
    Column() {
      //柱状图组件
      McBarChart({ options: this.defOptions })
        .height('60%') //设置图表区域的高度
    }
    .height('100%')
    .width('100%')
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

锐捷网络设备常用命令(交换机、路由器)

因公司办公网络设备转为锐捷产品,特此学习一些锐捷交换机和路由器的相关配置: enable 进入特权模式 configure terminal 进入全局模式 logging on 日志显示(默认) no logging on 关闭日志显示 exit 返回上一层 end 返回到特权模式…

一文读懂模型的数据集Datasets

众所周知,数据集(Datasets)对于模型来说非常重要,它是大模型这台庞大机器的原材料,在机器学习领域中所有的原生模型都是通过数据集训练出来的。本文将以通俗易懂的方式为大家介绍一下大模型的数据集,让大家…

如何通过自学成长为一名后端开发工程师?

大家好,我是袁庭新。最近,有星友向我提出了一个很好的问题:如何通过自学成为一名后端开发工程师? 为了解答这个疑问,我特意制作了一个视频来详细分享我的看法和建议。 戳链接:如何通过自学成长为一名后端开…

C语言 静态变量 +静态函数

静态局部变量 特点 静态局部变量常用于需要在函数调用之间保持数据持久性和状态的情况,例如计数器、缓存等。 静态全局变量 特点 静态全局变量适用于在当前源文件内共享数据,但希望限制其它源文件的访问权限的情况。它们可以避免全局命名空间的干扰&…

A6481 基于Java+mysql+Vue+MySQL+uni-app在线商城系统微信小程序的设计与实现 配置 源码 全套资料

在线商城系统微信小程序 1.摘要2. 系统开发的目的和意义3.功能结构4.界面展示5.源码获取 1.摘要 随着信息时代的发展,用户的消费水平也在不断的上升,传统超市以及电子商务在线上推广和购物体验等方面也到了一个瓶颈期。淘宝、京东等购物平台需要占手机更…

TEA系列例题

解析 TEA 加密算法(C语言、python):_tea加密-CSDN博客 CTF-RE 从0到N: TEA_tea加密原理-CSDN博客 1 字节 8 位 牢记密文的64位和密钥的128位,最好可以自己独立的写出tea解密代码 相当于密文是传入8个字符类型数据或者是2个整型数据, 密钥是16个字符数据或者4个…

静态属性与实例属性:深入理解Java中的属性类型

在Java编程中,属性(也称为字段)是类的重要组成部分,它们用于存储对象的状态。根据属性的作用范围和生命周期,Java中的属性可以分为两类:静态属性(Static Attributes)和实例属性&…

洞察企业税务全面风险!

2020年底OECD《税收征管3.0:税收征管的数字化转型》的发布,拉开了全球各国税收征管数字化转型帷幕。中国政府积极响应,依托金税四期工程陆续推出全国统一电子税务局、乐企平台等系统,为企业税务数智化转型提供有效支撑。 用友积极…

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3Vue3管理系统 前端项目搭建(默认开发环境:node20,Jdk17)创建项目并下载依赖--执行以下命令 前端项目搭建(默认开发环境:node20,Jdk17) 创建项目并下载依赖–执行以下命令 创建项目 y…

链式设计模式——装饰模式和职责链模式

一、装饰模式 1、概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 ConcreteComponent :是定义了一个具体的对象,可以给这个对象添加一些职责;Decorator :装饰抽象…

【Elasticsearch】实现用户行为分析

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

Linux评估网络性能

网络性能直接影响应用程序对外提供服务的稳定性和可靠性 ping命令检测网络的连通性 如果网络反应缓慢,或连接中断,可以用ping来测试网络的连通情况 time值(单位为毫秒)显示了两台主机之间的网络延时情况。如果此值很大,则表示网络的延时很大…

工业智能网关如何为企业实现智能制造赋能?

在数字化转型的浪潮中,工业智能网关作为连接物理世界与数字世界的桥梁,正逐步成为智能制造领域的核心组件。本文将通过一个实际使用案例,深入剖析工业智能网关如何助力企业实现生产流程的优化、数据的高效采集与分析,以及智能化决…

【LLMs】用LM Studio本地部署离线大语言模型

文章目录 一、下载LM Studio二、下载大语言模型1. 查看模型介绍2. 点击模型文件进行下载2.1 完整下载2.2 部分下载 三、加载模型1. 打开LM Studio图形化界面,点击**My Models**2. 然后,点击“...”,选择“change”,选择刚下载好的…

Python_Flask04(牛马问答平台01)

项目名称:牛马问答平台 项目简介:1.主要用来给社会上的牛马们探讨老板的恶心之处。 2. 用来学习交流。 技术手段:Python3.x Flask render_template pymysql flask_sqlalchemy........ 注意该博客为迭代项目,于最后一期展示完整…

【时时三省】(C语言基础)结构体内存对齐练习题

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 练习一 这个输出结果是8 练习二 这个输出结果是16 练习三 这个输出结果是32 上面的输出结果都是根据结构体对齐规则来计算的

在ARM Linux应用层下使用SPI驱动WS2812

文章目录 1、前言2、结果展示3、接线4、SPI驱动WS2812原理4.1、0码要发送的字节4.2、1码要发送的字节4.3、SPI时钟频率 5、点亮RGB5.1、亮绿灯5.2、亮红灯5.3、亮蓝灯5.4、完整程序 6、RGB呼吸灯7、总结 1、前言 事情是这样的,前段时间,写了一个基于RK3…

unity3d—demo(2d人物左右移动发射子弹)

目录 人物代码示例: 子弹代码示例: 总结上面代码: 注意点: 人物代码示例: using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerTiao : MonoBehaviour {public f…

Python subprocess.run 使用注意事项,避免出现list index out of range

在执行iOS UI 自动化专项测试的时候,在运行第一遍的时候遇到了这样的错误: 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…

怎么样能使Ubuntu的文件浏览器显示当前目录的路径,而不是只显示一个文件名?

默认情况下Ubuntu的文件浏览器是只显示当前目录的目录名的,这很不便我们查看路径或直接利用路径进行定位,那么怎么样能使Ubuntu的文件浏览器显示当前目录的路径呢? 两种方法: 第1种-临时方法 按下快捷键 Ctrl L,导航…