echarts 瀑布图(简单的k线图)

准备数据

//  xianZhongFallList:[13.47, 0.11, 0.02, 0.42, 0.63, 0.59, -0.47, 0.39]
//  xianZhongFallXxais:['行业增速', '家用交强件数影响', '家用交强件均影响', '家用商业件数影响', '家用商业件均影响', '商用件数影响', '商用件均影响', '结构影响', '主体增速']

 主要在于先处理数据,

pageInit1() {
      var echarts = this.$echarts;
      var myChart = echarts.init(document.getElementById("charts3"));
      // 清空画布
      let dw1 = this.dw
      let _this = this
      myChart.clear();
      var dy = this.xianZhongFallList.map(item=>{
        return Number(item)
      });
      var zt = [];
      var label = [];
      var tot = dy[0];
      for (var i = 0; i < dy.length; i++) {
        var obj = [];
        if (i === 0) {
          if (dy[0] >= 0) {
            label.push({
              value: parseFloat(dy[i]).toFixed(2),
              coord: [i, dy[i]],
            });
          } else {
            label.push({ value: parseFloat(dy[i]).toFixed(2), coord: [i, 0] });
          }
          obj.push(0);
          obj.push(dy[i]);
          obj.push(dy[i]);
          obj.push(dy[i]);
          zt.push(obj);
        } else {
          var start = zt[i - 1][1];
          var val = parseFloat(dy[i]);
          var end = start + val;
          tot = tot + dy[i];
          if (dy[i] < 0) {
            let tot1;
            tot1 = tot - dy[i];
            label.push({
              value: parseFloat(dy[i]).toFixed(2),
              coord: [i, tot1],
            });
          } else {
            label.push({
              value: parseFloat(dy[i]).toFixed(2),
              coord: [i, tot],
            });
          }
          obj.push(start);
          obj.push(end);
          obj.push(end);
          obj.push(end);
          zt.push(obj);
        }
      }

      let option = {
        grid: {
          left: "3%",
          right: "4%",
        //   bottom: "3%",
          containLabel: true,
        },
        title: {
          show: this.xianZhongFallList.length == 0,   // 没数据才显示
          textStyle: {
              color: "grey",
              fontSize: 20
          },
          text: "暂无数据",
          left: "center",
          top: "center"
        },
        dataZoom: [
          {
            show: false, //是否显示下方滚动条
            realtime: true,
            start: 0, //显示数据开始位置
            end: 100, //显示数据结束位置
          },
          {
            type: "inside",
            realtime: true,
            start: 0,
            end: 100,
          },
        ],
        xAxis: {
          data: this.xianZhongFallXxais,
          axisTick: {
            show: false,
          },
          axisLine: {
            show: false,
          },
          axisLabel: {
            margin: 20,
            formatter: function (value) {
              var ret = ""; //拼接加\n返回的类目项
              var maxLength;
              if (value.length === 2 && _this.chartsid === "qblj") {
                maxLength = 2; //每项显示文字个数
              } else if (value.length === 8 && _this.chartsid === "qblj") {
                maxLength = 4;
              } else if (value.length == 6 && _this.chartsid === "qblj") {
                var str1 = value.slice(0, 2) + "\n" + value.slice(2);
              }

              var valLength = value.length; //X轴类目项的文字个数
              var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
              if (rowN > 1) {
                //如果类目项的文字大于5,
                for (var i = 0; i < rowN; i++) {
                  var temp = ""; //每次截取的字符串
                  var start = i * maxLength; //开始截取的位置
                  var end = start + maxLength; //结束截取的位置
                  //这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
                  temp = value.substring(start, end) + "\n";
                  ret += temp; //凭借最终的字符串
                }
                return ret;
              } else if (value.length === 6 && _this.chartsid === "qblj") {
                return str1;
              } else {
                return value;
              }
            },
          },
          nameGap: 30,
        },
        yAxis: {
          type: "value",
          axisLine: {
            show: false,
          },
          axisTick: {
            show: false,
          },
          axisLabel: {
            formatter: dw1==='1'?"{value}万元":"{value}%"
          },
          splitLine: {
            lineStyle: {
              type: "dashed",
            },
          },
        },
        series: [
          {
            type: "candlestick",
            //开始值、结束值、最大值、最小值
            barWidth: 15,
            data: zt.map((item, index) => {
              return {
                value: item,
                itemStyle: {
                  color: "#438f75",
                  color0:"#cc2c3b",
                  borderWidth: 0,
                },
              };
            }),
            markPoint: {
              symbol: "rect",
              //图形上面的小头隐藏
              symbolSize: 0.000000000000001,
              label: {
                show: true,
                color: "#000",
                position: "top",
                fontSize: 10,
                formatter: function (res) {
                  if (Math.floor(res.data.value) === res.data.value) {
                    return res.data.value + ".0";
                  } else {
                    return res.data.value;
                  }
                },
              },
              data: label,
            },
            emphasis: {
              itemStyle: {
                // color:'yellow',
                // color0:'#509c83',
                borderWidth: 0,
              },
            },
          },
        ],
      };

      myChart.setOption(option, true);
      common.resizeEcharts(this.charts3, myChart);
    },

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts瀑布图是一种特殊的柱状图,用于展示数据的分解和变化情况。瀑布图通过按照维度/指标分解数据,如公司收入按用途分解、公司年利润按分公司分解、业绩按销售团队分解等,来展示数据的变化过程。相对于饼图,瀑布图的优势在于可以清晰辨识拆解项,即使拆解项较多时也不会造成混淆。\[1\] 要绘制Echarts瀑布图,可以使用pyecharts库。首先,需要安装pyecharts库,可以使用pip install pyecharts命令进行安装。然后,可以使用虚拟数据来绘制瀑布图。例如,假设你是一个老板,想要展示2023年公司的总人数、招聘人数和离职人数的变化情况。可以使用Bar类来创建瀑布图,并设置相应的数据和样式。\[2\]\[3\] 以下是一个使用pyecharts库绘制瀑布图的示例代码: ```python from pyecharts.charts import Bar from pyecharts import options as opts # 数据 month = \['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\] fixed = \[48, 42, 42, 48, 58, 61, 61, 58, 58, 63, 67, 66\] add = \['-', '-', 6, 10, 5, '-', 4, '-', 5, 6, '-', '-'\] reduce = \[2, 6, '-', '-', '-', 2, '-', 7, '-', '-', 2, 1\] # 创建瀑布图对象 bar = Bar() # 添加数据 bar.add_xaxis(month) bar.add_yaxis('各月稳定人数', y_axis=fixed, category_gap=2, stack="人数", itemstyle_opts=opts.ItemStyleOpts(color="rgb(240,240,240)")) bar.add_yaxis('各月增加人数', y_axis=add, stack='人数', category_gap=2) bar.add_yaxis('各月减少人数', y_axis=reduce, stack='人数', category_gap=2) # 设置全局配置 bar.set_global_opts( xaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size=8, color='green', font_weight='bolder') ), yaxis_opts=opts.AxisOpts( axislabel_opts=opts.LabelOpts(font_size=10, color='blue', font_weight='bolder') ) ) # 渲染图表 bar.render('people_total_waterfall.html') ``` 以上代码中,我们使用Bar类创建了一个瀑布图对象,并通过add_xaxis和add_yaxis方法添加了数据。然后,使用set_global_opts方法设置了x轴和y轴的样式。最后,使用render方法将图表渲染为HTML文件。 请注意,以上示例中的数据和样式仅供参考,你可以根据自己的需求进行修改和调整。 #### 引用[.reference_title] - *1* [用echarts绘制瀑布图](https://blog.csdn.net/dongdouzin/article/details/117949890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [循序渐进,学会用pyecharts绘制瀑布图](https://blog.csdn.net/weixin_43790276/article/details/130252095)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值