echarts叠加3D立体柱状图

效果图:
在这里插入图片描述
实现代码:

var xData = ["项目1", "项目2", "项目3", "项目4", "项目5", "项目6"]; 
// 计划数据数组
var planData = [320, 302, 301, 334, 390, 0];
// 完成数据数组
var completeData = [320, 132, 101, 0, 90, 0];
var color = [
    {
      type: "linear",
      x: 0,
      x2: 1,
      y: 0,
      y2: 0,
      colorStops: [
        {
          offset: 0,
          color: "#54a2d3",
        },
        {
          offset: 0.5,
          color: "#54a2d3",
        },
        {
          offset: 0.5,
          color: "#7ed1e3",
        },
        {
          offset: 1,
          color: "#7ed1e3",
        },
      ],
    },
    {
      type: "linear",
      x: 0,
      x2: 1,
      y: 0,
      y2: 0,
      colorStops: [
        {
          offset: 0,
          color: "#a3a418",
        },
        {
          offset: 0.5,
          color: "#a3a418",
        },
        {
          offset: 0.5,
          color: "#cdbf38",
        },
        {
          offset: 1,
          color: "#cdbf38",
        },
      ],
    },
  ];
  var barWidth = 30;
  var constData = [];
  var showData = [];
  var otherData = [];
  for (var i = 0; i < planData.length; i++) {
    planData[i] = Number(planData[i]);
    completeData[i] = Number(completeData[i]);
    otherData[i] = planData[i] - completeData[i];
    if (planData[i] <= 0) {
      constData.push(0);
      showData.push({
        value: 1,
        itemStyle: {
          normal: {
            borderColor: "rgba(0,0,0,0)",
            borderWidth: 2,
            color: "rgba(0,0,0,0)",
          },
        },
      });
    } else {
      if (completeData[i] == planData[i]) {
        constData.push({
          value: 1,
          itemStyle: {
            normal: {
              color: color[1],
            },
          },
        });
      } else {
        constData.push(1);
      }
      if (completeData[i] > 0) {
        showData.push({
          value: planData[i],
          itemStyle: {
            normal: {
              borderColor: "#e9d86c",
              borderWidth: 2,
              color: "#e9d86c",
            },
          },
        });
      } else {
        showData.push({
          value: planData[i],
          itemStyle: {
            normal: {
              borderColor: "#89e3ec",
              borderWidth: 2,
              color: "#89e3ec",
            },
          },
        });
      }
    }
  }
  var option = {
    tooltip: {
      trigger: "axis",
      formatter: function (params) {
        return params[0].axisValue + ":" +
        "<br/>计划:" + planData[params[0].dataIndex] +
        "<br/>完成:" + completeData[params[0].dataIndex];
      },
    },
    legend: {
      data: ["计划", "完成"],
    },
    grid: {
      left: "3%", //图表距边框的距离
      right: "3%",
      top: "15%",
      bottom: "5%",
      containLabel: true,
    },
    xAxis: {
      data: xData,
      axisTick: {
        show: false,
      },
    },
    yAxis: {
      axisTick: {
        show: false,
      },
      axisLine: {
        show: false,
      },
      axisLabel: {
        show: false,
      },
    },
    series: [
      {
        z: 1,
        name: "计划",
        type: "bar",
        barWidth: barWidth,
        stack: "总量",
        color: color[0],
        data: otherData,
      },
      {
        z: 2,
        name: "完成",
        type: "bar",
        barWidth: barWidth,
        stack: "总量",
        color: color[1],
        data: completeData,
      },
      {
        z: 3,
        name: "项目",
        type: "pictorialBar",
        data: constData,
        symbol: "diamond",
        symbolOffset: ["0%", "50%"],
        symbolSize: [barWidth, 10],
        itemStyle: {
          normal: {
            color: color[0],
          },
        },
        tooltip: {
          show: false,
        },
      },
      {
        z: 4,
        name: "项目",
        type: "pictorialBar",
        data: otherData,
        symbol: "diamond",
        symbolPosition: "end",
        symbolOffset: ["0%", "-50%"],
        symbolSize: [barWidth, 10],
        itemStyle: {
          normal: {
            color: color[1],
          },
        },
        tooltip: {
          show: false,
        },
      },
      {
        z: 5,
        name: "项目",
        type: "pictorialBar",
        symbolPosition: "end",
        data: showData,
        symbol: "diamond",
        symbolOffset: ["0%", "-50%"],
        symbolSize: [barWidth - 4, (10 * (barWidth - 4)) / barWidth],
        tooltip: {
          show: false,
        },
      },
    ],
  };
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
要创建一个叠加3D柱状图,使用ECharts库可以按照以下步骤进行操作: 1. 首先,确保你已经引入了ECharts库。你可以通过以下方式之一来引入: - 使用CDN链接:在HTML文件的`<head>`标签内添加以下代码: ```html <script src="https://cdn.jsdelivr.net/npm/echarts@5.2.1/dist/echarts.min.js"></script> ``` - 下载并引入本地文件:下载ECharts的最新版本并将文件解压到你的项目文件夹中,然后在HTML文件的`<head>`标签内添加以下代码: ```html <script src="path/to/echarts.min.js"></script> ``` 2. 创建一个容器元素来放置图表。在HTML中,添加一个`<div>`元素作为图表容器。例如: ```html <div id="chartContainer" style="width: 600px; height: 400px;"></div> ``` 3. 使用JavaScript代码创建图表。在你的JavaScript文件中,使用ECharts提供的API来配置和绘制图表。以下是一个简单的示例代码: ```javascript // 获取图表容器元素 var chartContainer = document.getElementById('chartContainer'); // 创建图表实例 var chart = echarts.init(chartContainer); // 设置图表配置项 var options = { grid3D: { // 设置3D网格 boxWidth: 200, boxHeight: 100, boxDepth: 80, viewControl: { distance: 200 // 设置视角距离 } }, xAxis3D: {}, // 设置X轴 yAxis3D: {}, // 设置Y轴 zAxis3D: {}, // 设置Z轴 series: [{ // 设置数据系列 type: 'bar3D', data: [ [0, 0, 0, 10], // 数据格式:[x, y, z, value] [1, 0, 0, 20], [0, 1, 0, 30], [1, 1, 0, 40], [0, 0, 1, 50], [1, 0, 1, 60], [0, 1, 1, 70], [1, 1, 1, 80] ], shading: 'lambert', // 设置柱状图的光照效果 label: { show: true, textStyle: { fontSize: 16, borderWidth: 1 } } }] }; // 使用配置项绘制图表 chart.setOption(options); ``` 在上面的示例中,我们使用了`bar3D`类型的系列来创建3D柱状图。数据项的格式为[x, y, z, value],其中(x, y, z)表示柱子的位置,value表示柱子的高度。 4. 最后,打开你的HTML文件在浏览器中预览图表。 这是一个简单的例子,你可以根据你的具体需求进行更多的配置,例如添加坐标轴标签、设置柱状图的颜色等。你可以参考ECharts官方文档来了解更多的配置选项和示例代码。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值