zoukankan      html  css  js  c++  java
  • vue 使用echarts来制作图表

    vue项目中制作图表

    一、开始引入依赖

    npm install --save echarts 

    二、失败的情况安装echarts(成功跳过这步):

    查看npm是否安装没有问题
    npm -v
    查看npm源
    npm get registry
    切换淘宝源
    npm config set registry http://registry.npm.taobao.org
    查看源确认切换完成
    npm get registry

    切换官方源 npm config set registry http://www.npmjs.org

    三、安装成功项目引入echsrts

    这样引入会出现失败
    import echarts from 'echarts';

     “export ‘default‘ (imported as ‘echarts‘) was not found in ‘echarts‘

    正常引入方式
    import * as echarts from 'echarts';

    四、html页面代码

    <div  ref="indexChart"  :style="{  '100%', height: '300px' }"></div>

    五、js代码

    // 基于准备好的dom,初始化echarts实例
    let myChart = echarts.init(this.$refs.indexChart);
    // 绘制图表
    myChart.setOption({})

    1.曲线图:series: type: 'line',

    myChart.setOption({
      // 提示框组件
        tooltip: {
            trigger: 'axis' // 坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
        },
      // 系列 ,顶部展示的分类
        legend: {
            data: ['近七日收益','月收益']
        },
      // 直角坐标系内绘图网格
        grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
        },
      // 
        toolbox: {
            feature: {
                saveAsImage: {}
            }
        },
      // x轴样式
        xAxis: {
            type: 'category',
            boundaryGap: false,
                data: ["1","2","3","4","5"]
                        
        },
      // y轴样式
        yAxis: {
            type: 'value'
        },
      // 图形样式配置
        series: [{
            name: '近七日收益',
            type: 'line',
            stack: '总量',
            data: this.opinionData
        }]
    })    

    2.柱状图 series: type: 'bar',

    myChart.setOption({
         // 标题组件 title: { text:
    "在Vue中使用echarts" },
         // 提示框组件 tooltip: {},
         // x轴配置 xAxis: { data: [
    "衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"] },
         // y轴配置 yAxis: {},
         // 图形样式配置 series: [ { name:
    "销量", type: "bar", data: [5, 20, 36, 10, 10, 20] } ] });

    3、扇形图series: type: 'pie',

    myChart.setOption({
        // 标题
        title: {
            text: '客户贡献', //标题
            x: 'center'    // 位置
        },
        // 
        tooltip: {
            trigger: 'item',
            formatter: "{a} <br/>{b}: {c} ({d}%)"
          // a: 标题 b:名称 c :数值 d :占有度 
        },
        // 模块颜色
        color: ['#31b0d5', 'pink', 'green', 'purple', 'yellow'],
        // 
        legend: {
            type: 'scroll',
            orient: 'vertical',
            right:0,
            top: 20,
            bottom: 20,
            data: ['大米','百度','红龙','七哈','凑数']
        },
        // 图形样式配置 
        series: [{
            name: '客户贡献',
            type: 'pie',
            radius: '55%', // 大小
            itemStyle: {
                    normal: {
                    label: {
                        show: true,
                        formatter: "{b}:  ({d}%)", //显示标签
                    },
                    labelLine: {
                        show: true, //显示标签线
                        // length:10
                    },
                    borderWidth: 2, //设置border的宽度有多大
                    borderColor: '#fff',
                },
            },
            // 数据数量和名称
            data: [
                 {value: 5,name: '大米'},
                 {value: 5,name: '百度'},
                 {value: 5,name: '红龙'},
                 {value: 5,name: '七哈'},
                 {value: 5,name: '凑数'}
             ]
        }]
    });                                    

    4.南丁格尔图series: type: 'pie',

    let data = [
            { value: 10, name: "rose1" },
            { value: 5, name: "rose2" },
            { value: 15, name: "rose3" },
            { value: 25, name: "rose4" },
            { value: 20, name: "rose5" },
            { value: 35, name: "rose6" },
            { value: 30, name: "rose7" },
            { value: 40, name: "rose8" },
          ].sort((a, b) => {
            return a.value - b.value;
          });
          let myChart = echarts.init(this.$refs.indexChart3);
          myChart.setOption({
            backgroundColor: "#E6F1FE",
    
            title: {
              text: "南丁格尔玫瑰图",
              subtext: "二级标题",
              x: "left",
            },
            tooltip: {
              trigger: "item",
              formatter: "{a} <br/>{b} :<br/> {c} ({d}%)",
              backgroundColor: "rgba(255, 255, 255, 0.5)",
              extraCssText:
                "box-shadow: 10px 10px 10px 0 rgba(0,0,0,0.20); padding: 10px 14px;border-radius: 4px;",
              textStyle: {
                color: "#3c3c3c",
              },
            },
            legend: {
              x: "center",
              y: "bottom",
              data: [
                "rose1",
                "rose2",
                "rose3",
                "rose4",
                "rose5",
                "rose6",
                "rose7",
                "rose8",
              ],
            },
            toolbox: {
              show: true,
              feature: {
                mark: { show: true },
                dataView: { show: true, readOnly: false },
                magicType: {
                  show: true,
                  type: ["pie", "funnel"],
                },
                restore: { show: true },
                saveAsImage: { show: true },
              },
            },
            // 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)
            calculable: true,
            series: [
              {
                name: "半径模式",
                type: "pie",
                radius: [20, 110],
                center: ["50%", "50%"],
                // 是否展示成南丁格尔图
                roseType: "radius",
                // 是否启用防止标签重叠策略
                avoidLabelOverlap: true,
                label: {
                  fontSize: 12,
                  normal: {
                    show: true,
                  },
                  emphasis: {
                    show: true,
                  },
                },
                lableLine: {
                  normal: {
                    show: false,
                  },
                  emphasis: {
                    show: true,
                  },
                },
                data: data,
              },
            ],
          });

     

    5.水球图series: type: 'liquidFill',

    加载水球图需要安装依赖echarts-liquidfill

    npm i echarts-liquidfill

    如果直接安装上面的代码可能回运行不起来,因为直接安装版本是3.0.0的版本,需要2.6的版本才能运行起来

    npm update echarts-liquidfill@2.0.6

    使用方法

    // 绘制图表
          myChart.setOption({
              // 图表主标题
              title: {
                show:false,
                text: "槽使用情况",
                // x 设置水平安放位置,默认左对齐,可选值:'center' ¦ 'left' ¦ 'right' ¦ {number}(x坐标,单位px)
                x: "10px",
                // y 设置垂直安放位置,默认全图顶端,可选值:'top' ¦ 'bottom' ¦ 'center' ¦ {number}(y坐标,单位px)
                y: "0px",
                // itemGap设置主副标题纵向间隔,单位px,默认为10,
                itemGap: 30,
                backgroundColor: "#fff",
      
                // 主标题文本样式设置
                textStyle: {
                  fontSize: 16,
                  fontWeight: "500",
                  color: "#fff"
                }
                // 副标题文本样式设置
              },
              // 提示框组件
              tooltip: {
                trigger: "item", // 触发类型, 数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
                textStyle: {
                  color: "#fff" // 文字颜色
                },
                // 提示框浮层内容格式器,支持字符串模板和回调函数两种形式
                // 水球图: {a}(系列名称),{b}(无),{c}(数值)
                // 使用函数模板   传入的数据值 -> value: number|Array,
                formatter: function(value) {
                  return value.seriesName + ": " + value.data * 100 + "%";
                }
              },
              series: [
                {
                  type: "liquidFill",
                  name: "已用槽", // 系列名称,用于tooltip的显示,legend 的图例筛选
                  radius: "89%", // 水球图的半径
                  center: ["52%", "55%"], // 水球图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标
                  // 水填充图的形状 circle 默认圆形  rect 圆角矩形  triangle 三角形
                  // diamond 菱形  pin 水滴状 arrow 箭头状  还可以是svg的path
                  shape: "circle",
                  phase: 0, // 波的相位弧度 不设置  默认自动
                  direction: "right", // 波浪移动的速度  两个参数  left 从右往左 right 从左往右
                  outline: {
                    show: true,
                    borderDistance: 0, // 边框线与图表的距离 数字
                    itemStyle: {
                      opacity: 0.9, // 边框的透明度   默认为 1
                      borderWidth: 2, // 边框的宽度
                      shadowBlur: 14, // 边框的阴影范围 一旦设置了内外都有阴影
                      shadowColor: "#fff", // 边框的阴影颜色,
                      borderColor: '#FE916F' // 边框颜色
                    }
                  },
                  // 图形样式鼠标移上效果
                  // itemStyle: {
                  //   color: '#FE900F', // 水球显示的背景颜色
                  //   opacity: 0.4, // 波浪的透明度
                  //   shadowBlur: 10 // 波浪的阴影范围
                  // },
                  backgroundStyle: {
                    color: "#fff" // 水球未到的背景颜色
                  },
                  // 图形的高亮样式
                  emphasis: {
                    itemStyle: {
                      opacity: 1 // 鼠标经过波浪颜色的透明度
                    }
                  },
                  // 图形上的文本标签
                  label: {
                    fontSize: 26,
                    fontWeight: 400,
                    color: '#FE916F'
                  },
                  color: [
                    {
                      type: "linear",
                      x: 0,
                      y: 1,
                      x2: 0,
                      y2: 0,
                      colorStops: [
                        {
                          offset: 1,
                          color: ["rgba(249, 146, 113, 0.8)"] // 0% 处的颜色
                        },
                        {
                          offset: 0,
                          color: ["rgba(255, 255, 255, 1)"] // 100% 处的颜色
                        }
                      ],
                      global: false // 缺省为 false
                    }
                  ],
                  data: [0.6] // 系列中的数据内容数组
                }
              ]
            
          });

    水球图支持非常高度定制化的需求,包括颜色(color)、大小(radius)、波的振幅(amplitude)、波长(waveLength)、相位(phase)、周期(period)、移动方向(direction)、形状(shape)、动画(waveAnimation)等等,完整的配置项参数参见水球图 API。文档有针对每个配置项的详细说明

     6.漏斗图series: type: 'funnel',

    // 绘制图表
          myChart.setOption({
              title: {
                  text: '漏斗图',
                  subtext: '纯属虚构'
              },
              tooltip: {
                  trigger: 'item',
                  formatter: "{a} <br/>{b} : {c}%"
              },
              // 控制左上角的功能组件
              // toolbox: {
              //     feature: {
              //         dataView: {readOnly: false},
              //         restore: {},
              //         saveAsImage: {}
              //     }
              // },
              legend: {
                  data: ['展现','点击','访问','咨询','订单']
              },
    
              series: [
                  {
                      name:'漏斗图',
                      type:'funnel',
                      left: '10%',
                      top: 60,
                      bottom: 60,
                       '80%',
                      min: 0,
                      max: 100,
                      minSize: '0%',
                      maxSize: '100%',
                      gap: 2,
                      label: {
                          show: true,
                          position: 'inside'
                      },
                      labelLine: {
                          length: 10,
                          lineStyle: {
                               1,
                              type: 'solid'
                          }
                      },
                      itemStyle: {
                          borderColor: '#fff',
                          borderWidth: 1
                      },
                      emphasis: {
                          label: {
                              fontSize: 20
                          }
                      },
                      data: [
                          {value: 60, name: '访问'},
                          {value: 40, name: '咨询'},
                          {value: 20, name: '订单'},
                          {value: 80, name: '点击'},
                          {value: 100, name: '展现'}
                      ]
                  }
              ]
          });

     7.U型环series: type: 'bar',

    // 绘制图表
          myChart.setOption({
              angleAxis: {
                max: 100, // 满分
                clockwise: false, // 逆时针
                // 隐藏刻度线
              axisLine: {
                show: false
              },
              axisTick: {
                show: false
              },
              axisLabel: {
                show: false
              },
              splitLine: {
                show: false
              },
              // 旋转角度
              startAngle: 180
            },
            radiusAxis: {
              type: 'category',
                // 隐藏刻度线
              axisLine: {
                  show: false
                },
                axisTick: {
                  show: false
                },
                axisLabel: {
                  show: false
                },
                splitLine: {
                  show: false
                }
              },
            polar: {
              center: ['50%', '30%'],
              radius: '220%' //图形大小
            },
            series: [{
              type: 'bar',
              data: [{
                name: '进度值',
                value: 10,
                itemStyle: {
                  normal: {
                    color: { // 完成的圆环的颜色
                      colorStops: [{
                        offset: 0,
                        color: '#48FFFF' // 0% 处的颜色
                      }, {
                        offset: 1,
                        color: '#48FFFF' // 100% 处的颜色
                      }]
                    }
                  }
                },
              }],
              coordinateSystem: 'polar',
              roundCap: true,
              barWidth: 18,
              barGap: '-100%', // 两环重叠
              radius: ['49%', '52%'],
              z: 2,
            },{ // 灰色环外部容积盒子
              type: 'bar',
              data: [{
              value: 50,
              itemStyle: {
                color: '#3B4068',
              }
              }],
              coordinateSystem: 'polar',
              roundCap: true,
              barWidth: 26,
              barGap: '-123%', // 两环重叠
              radius: ['48%', '53%'],
              z: 1
            },
            // {
            //   name: '圆点',
            //   type: 'scatter',
            //   hoverAnimation: false,
            //   data: [20],
            //   symbolSize: 34,
            //   coordinateSystem: 'polar',
            //   roundCap: true,
            //   barGap: '-80%', // 两环重叠
            //   radius: ['48%', '53%'],
            //   z: 2,
            //   itemStyle: {
            //     normal: {
            //         color: '#48FFFF',
            //         opacity: 1,
            //     }
            //   }
            // }
            ]
          });

     更多图案选取

    https://echarts.apache.org/examples/zh/index.html

    六、正常运行代码:

    mounted() {
          this.drawLine();
    },
    methods: {
        drawLine() {
          // 基于准备好的dom,初始化echarts实例
          let myChart = echarts.init(this.$refs.indexChart);
          // 绘制图表
          myChart.setOption({
           ....
          })  
        }
      }

    七、运行的时候出现问题:

    百度了下,说是dom没有加载完的问题,要放在this.$nextTick改成

      mounted() {
        this.$nextTick(() => {
          this.drawLine();
        });
      }

    这样可以了。

    后来测试 了下,用vif控制 隐藏与显示也是报这样的错。。vshow不会。

    原理还是一样吧,vif是dom不加载 的。vshow只是把dom display:none,还是加载了

  • 相关阅读:
    【bzoj1010】[HNOI2008]玩具装箱toy
    bzoj 3173
    bzoj 1179
    bzoj 2427
    bzoj 1051
    bzoj 1877
    bzoj 1066
    bzoj 2127
    bzoj 1412
    bzoj 3438
  • 原文地址:https://www.cnblogs.com/yishifuping/p/15087210.html
Copyright © 2011-2022 走看看