美文网首页
echarts使用与踩坑

echarts使用与踩坑

作者: storyWrite | 来源:发表于2023-03-11 22:10 被阅读0次

    0.踩坑点

    • 1.当图表不显示在页面(display:none)执行resize可能会导致图表样式混乱
    ### 1. 官网示例
    

    import * as echarts from 'echarts';

    // 基于准备好的dom,初始化echarts实例
    // 注意: 这里的main元素要有宽度才可以,不然页面上是看不到渲染的图标的,但实际上echarts已经初始化,
    // 但是由于绘制挂载的元素没高度不可见 官网这里没有给出对应的main相关的代码 因此直接写一个<div id='main'></div> 是看不到渲染的元素的
    var myChart = echarts.init(document.getElementById('main'));
    // 绘制图表
    myChart.setOption({
    title: {
    text: 'ECharts 入门示例'
    },
    tooltip: {},
    xAxis: {
    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    },
    yAxis: {},
    series: [
    {
    name: '销量',
    type: 'bar',
    data: [5, 20, 36, 10, 10, 20]
    }
    ]
    });

    ### 2. 使用到的一些api
    
    // 窗口变化后 重新绘制图形,达到自适应目的   
    window.addEventListener('resize', function() {
      // 此处可以使用debounce进行加载优化
        myChart.resize();
      });
    // 组件销毁 销毁掉绘制图表
     myChart.dispose();
    

    3.使用到的属性

      const option: EChartsOption = {
          // 标题
          title: {
            // 是否显示标题
            show: true,
            // 标题文字
            text: 'Echarts示例',
            // 图表位置 可以为百分比 或者具体px值
            top: '5%',
            bottom: 10,
            left: 'center',
            right: 'left',
            // 标题样式
            textStyle: {
              fontSize: 12,
              color: '#929292',
            },
            // 副标题
            subtext: '副标题'
            ,
            // 副标题样式
            subtextStyle: {}
          },
          // 提示框
          tooltip: {
            // 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
            trigger: 'item',
            // 背景色
            backgroundColor: 'white',
            // 边框
            borderColor: '#3fb1e3',
            // 文字样式
            textStyle: { color: '#333' },
            // 内容自定义
            formatter: (params) => {
              const { marker, name, value } = params;
              // marker为对应颜色小圆点
              return `${name}<br/>${marker}自定义显示内容:${value}`;
            },
            // 可以是字符串 代表{a} {b} 代表params中的参数
            // formatter: '{c}',
          },
          // 图例组件 即 饼图下方的分类 可以点击进行分类的选取 应用到对应的图形上
          legend: {
            // 图例类型 普通
            type: 'plain',
            // 是否展示
            show: true,
            // 位置
            bottom: '2%',
            // 文字样式
            textStyle: { fontSize: '12px', padding: 0, minMargin: 0 },
            // 颜色块大小  => 图例标记的图形宽度
            itemWidth: 15,
            // 图例组件整体宽度
            width: 180,
            // 图例的图形样式
            itemStyle: {
              borderWidth: 0,
            },
          },
          series: [
            {
              name: '示例1',
              // 图标类型 pie 饼图 bar 柱状图
              type: 'pie',
              // 位置
              bottom: 20,
              left: 'center',
              // 'radius' 扇区圆心角展现数据的百分比,半径展现数据的大小。
              // 'area' 所有扇区圆心角相同,仅通过半径展现数据大小。
              roseType: 'area',
              // 饼图半径  内半径:[20] 完整的园(披萨) 外半径: ['20%', '40%'] (最中间挖空一块 类似操场 只有跑道)
              radius: ['20%', '40%'],
              // 饼图的中心坐标
              center: ['center', 'center'],
              // 是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠。 => 会溢出隐藏
              avoidLabelOverlap: true,
              // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
              label: {
                show: true,
                // 标签说明位置 不加带有折线  加了位置后折线会消失
                // position: 'insideTop',
                formatter: '{c}',
              },
              // 颜色 会均分 颜色例如  9条数据 3个颜色 每三个颜色为一组循环
              color: ['#2ea6da', '#3fb1e3', '#b0f5ff'],
              // 高亮区域配置
              emphasis: {
                // 是否开启悬浮高亮
                disabled: false,
                // 高亮区域样式
                itemStyle: {
                  color: 'red'
                },
                // 高亮区域旁边的文字说明
                label: {
                  show: true,
                  // formatter: '1122'
                }
              },
              // 数据
              data: [
                { value: 0, name: '分类1' },
                { value: 1, name: '分类2' },
                { value: 2, name: '分类3' },
                { value: 3, name: '分类4' },
                { value: 5, name: '分类5' },
                { value: 4, name: '分类6' },
                { value: 3, name: '分类7' },
                { value: 6, name: '分类8' },
                { value: 4, name: '分类9' },
              ],
            },
          ],
        };
    

    4.按需加载

    全量引入大小
    按需引入大小

    如果按需加载后渲染图表缺失,可能你使用到的组件没有按需加载进入

    5.react示例注释代码,可直接复制运行

    import React, { useEffect } from 'react'
    import * as echarts from 'echarts/core';
    import {
      BarChart,
      // 系列类型的定义后缀都为 SeriesOption
      LineChart,
    } from 'echarts/charts';
    import {
      TitleComponent,
      // 组件类型的定义后缀都为 ComponentOption
      TooltipComponent,
      GridComponent,
      // 数据集组件
      DatasetComponent,
      // 内置数据转换器组件 (filter, sort)
      TransformComponent
    } from 'echarts/components';
    import { LabelLayout, UniversalTransition } from 'echarts/features';
    import { CanvasRenderer } from 'echarts/renderers';
    
    
    
    // 注册必须的组件
    echarts.use([
      TitleComponent,
      TooltipComponent,
      GridComponent,
      DatasetComponent,
      TransformComponent,
      BarChart,
      LineChart,
      LabelLayout,
      UniversalTransition,
      CanvasRenderer
    ]);
    type EChartsOption = echarts.EChartsCoreOption;
    
    export default function Echarts() {
      useEffect(() => {
        let chartDom = document.getElementById('echarts')!;
        let myChart = echarts.init(chartDom);
    
        const option: EChartsOption = {
          // 标题
          title: {
            // 是否显示标题
            show: true,
            // 标题文字
            text: 'Echarts示例',
            // 图表位置 可以为百分比 或者具体px值
            top: '5%',
            bottom: 10,
            left: 'center',
            right: 'left',
            // 标题样式
            textStyle: {
              fontSize: 12,
              color: '#929292',
            },
            // 副标题
            subtext: '副标题'
            ,
            // 副标题样式
            subtextStyle: {}
          },
          // 提示框
          tooltip: {
            // 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
            trigger: 'item',
            // 背景色
            backgroundColor: 'white',
            // 边框
            borderColor: '#3fb1e3',
            // 文字样式
            textStyle: { color: '#333' },
            // 内容自定义
            formatter: (params) => {
              const { marker, name, value } = params;
              // marker为对应颜色小圆点
              return `${name}<br/>${marker}自定义显示内容:${value}`;
            },
            // 可以是字符串 代表{a} {b} 代表params中的参数
            // formatter: '{c}',
          },
          // 图例组件 即 饼图下方的分类 可以点击进行分类的选取 应用到对应的图形上
          legend: {
            // 图例类型 普通
            type: 'plain',
            // 是否展示
            show: true,
            // 位置
            bottom: '2%',
            // 文字样式
            textStyle: { fontSize: '12px', padding: 0, minMargin: 0 },
            // 颜色块大小  => 图例标记的图形宽度
            itemWidth: 15,
            // 图例组件整体宽度
            width: 180,
            // 图例的图形样式
            itemStyle: {
              borderWidth: 0,
            },
          },
          series: [
            {
              name: '示例1',
              // 图标类型 pie 饼图 bar 柱状图
              type: 'pie',
              // 位置
              bottom: 20,
              left: 'center',
              // 'radius' 扇区圆心角展现数据的百分比,半径展现数据的大小。
              // 'area' 所有扇区圆心角相同,仅通过半径展现数据大小。
              roseType: 'area',
              // 饼图半径  内半径:[20] 完整的园(披萨) 外半径: ['20%', '40%'] (最中间挖空一块 类似操场 只有跑道)
              radius: ['20%', '40%'],
              // 饼图的中心坐标
              center: ['center', 'center'],
              // 是否启用防止标签重叠策略,默认开启,在标签拥挤重叠的情况下会挪动各个标签的位置,防止标签间的重叠。 => 会溢出隐藏
              avoidLabelOverlap: true,
              // 饼图图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
              label: {
                show: true,
                // 标签说明位置 不加带有折线  加了位置后折线会消失
                // position: 'insideTop',
                formatter: '{c}',
              },
              // 颜色 会均分 颜色例如  9条数据 3个颜色 每三个颜色为一组循环
              color: ['#2ea6da', '#3fb1e3', '#b0f5ff'],
              // 高亮区域配置
              emphasis: {
                // 是否开启悬浮高亮
                disabled: false,
                // 高亮区域样式
                itemStyle: {
                  color: 'red'
                },
                // 高亮区域旁边的文字说明
                label: {
                  show: true,
                  // formatter: '1122'
                }
              },
              // 数据
              data: [
                { value: 0, name: '分类1' },
                { value: 1, name: '分类2' },
                { value: 2, name: '分类3' },
                { value: 3, name: '分类4' },
                { value: 5, name: '分类5' },
                { value: 4, name: '分类6' },
                { value: 3, name: '分类7' },
                { value: 6, name: '分类8' },
                { value: 4, name: '分类9' },
              ],
            },
          ],
        };
        const chartResize = () => {
          myChart.resize()
        }
        myChart.setOption(option);
        window.addEventListener('resize', chartResize)
        return () => {
          myChart.dispose()
          window.removeEventListener('resize', chartResize)
        }
      })
      return (
        <>
          <div id='echarts' style={{ height: 300, width: '100%' }}>Echarts</div>
    
        </>
      )
    }
    
    

    相关文章

      网友评论

          本文标题:echarts使用与踩坑

          本文链接:https://www.haomeiwen.com/subject/jxbxrdtx.html