You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ECharts K线图中实现虚实蜡烛与统一颜色成交量

实现符合维基定义的K线+统一颜色成交量(基于ECharts Dataset)

核心方案

直接利用ECharts的dataset绑定原始数据,配合visualMap和itemStyle回调函数,通过数据中的红绿标识和虚实标识字段映射K线样式,同时给成交量系列设置统一颜色,无需拆分series.data。

配置步骤

  1. Dataset绑定
    直接传入格式为[日期,开盘,收盘,最低,最高,成交量,红绿标识,虚实标识]的rawData,其中:

    • 红绿标识:1表示收盘价>前收盘价(绿色),-1表示收盘价<前收盘价(红色)
    • 虚实标识:1表示收盘价>开盘价(空心蜡烛),-1表示收盘价<开盘价(实心蜡烛)
  2. K线样式映射

    • 用visualMap根据红绿标识字段(第7列,索引从0开始)映射K线的基础颜色
    • 通过itemStyle的回调函数,根据虚实标识字段(第8列)控制蜡烛的实心/空心:实心时填充色与边框色一致,空心时填充色设为透明
  3. 成交量统一颜色
    在同一网格内添加柱状图系列,绑定成交量字段(第6列),直接设置itemStyle.color: 'azure'实现统一颜色

完整代码示例

// 模拟动态rawData,格式:[日期,开盘,收盘,最低,最高,成交量,红绿标识,虚实标识]
const rawData = [
  ['2024-05-01', 150, 160, 148, 162, 12000, 1, 1],
  ['2024-05-02', 160, 155, 152, 163, 10000, -1, -1],
  ['2024-05-03', 155, 158, 153, 160, 8000, 1, 1],
  ['2024-05-04', 158, 154, 151, 159, 9000, -1, -1],
  ['2024-05-05', 154, 160, 153, 161, 11000, 1, 1]
];

const option = {
  grid: [
    { left: '10%', right: '10%', top: '10%', height: '60%' },
    { left: '10%', right: '10%', top: '75%', height: '20%' }
  ],
  dataset: { source: rawData },
  xAxis: [
    { type: 'category', gridIndex: 0, data: rawData.map(item => item[0]) },
    { type: 'category', gridIndex: 1, data: rawData.map(item => item[0]), axisLabel: { show: false } }
  ],
  yAxis: [
    { type: 'value', gridIndex: 0, scale: true },
    { type: 'value', gridIndex: 1, scale: true }
  ],
  visualMap: [
    {
      type: 'piecewise',
      show: false,
      dimension: 6, // 对应红绿标识字段(第7列,索引从0开始)
      pieces: [
        { value: 1, color: '#00da3c' }, // 绿色
        { value: -1, color: '#ec0000' } // 红色
      ]
    }
  ],
  series: [
    {
      name: 'K线',
      type: 'candlestick',
      gridIndex: 0,
      datasetIndex: 0,
      // 绑定开盘/收盘/最低/最高字段(索引1-4)
      encode: { x: 0, open: 1, close: 2, low: 3, high: 4 },
      itemStyle: {
        normal: {
          // 根据虚实标识控制实心/空心
          color: function(params) {
            // 虚实标识为-1(实心)时用visualMap颜色,否则透明
            return params.data[7] === -1 ? params.color : 'transparent';
          },
          borderColor: function(params) {
            return params.color; // 边框色始终用visualMap映射的颜色
          },
          borderWidth: 1
        }
      }
    },
    {
      name: '成交量',
      type: 'bar',
      gridIndex: 1,
      datasetIndex: 0,
      encode: { x: 0, y: 5 }, // 绑定成交量字段(索引5)
      itemStyle: {
        color: 'azure' // 统一设置成交量颜色
      }
    }
  ]
};

// 初始化图表
const myChart = echarts.init(document.getElementById('main'));
myChart.setOption(option);

关键说明

  • encode配置用于指定dataset中各列对应K线的哪个维度,无需手动拆分数据
  • visualMap的dimension对应数据中的红绿标识列,自动映射颜色
  • itemStyle回调通过params.data[7]获取虚实标识,动态设置填充色实现实心/空心切换
  • 成交量系列直接绑定dataset的成交量列,设置统一颜色即可

内容的提问来源于stack exchange,提问作者user27160653

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:55:03