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

Apache Echarts:添加中位数虚线、自动计算中位数及标签配置方法

Echarts横向柱状图中位数垂直虚线配置方案

1. 虚线在Echarts中的名称

这种标记特定数值的垂直虚线叫做markLine(标线),属于Echarts的标记组件,可直接在series中配置,用于标注图表中的关键数值线。

2. 基于数据集自动提取中位数

可以实现,步骤如下:

  • 从dataset的source中提取所有数据的数值字段;
  • 编写中位数计算函数,对数值数组排序后计算中位数;
  • 将计算得到的中位数传入markLine的配置中。

示例计算逻辑:

// 提取数值数组(需根据你的实际数据结构调整索引)
const values = (parseScenarios(data) || []).map(item => item[1]);
// 计算中位数函数
const getMedian = (arr: number[]) => {
  const sorted = [...arr].sort((a, b) => a - b);
  const mid = Math.floor(sorted.length / 2);
  return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
};
const medianValue = getMedian(values);

3. 添加"Moyenne"标签

在markLine的label配置中设置formatter为"Moyenne",并调整标签位置、样式即可。

修改后的完整配置代码

const barColors: string[] = ["#5BA0B4", "#E6BE72", "#4C2E25", "#809D92", "#CCA0B9", "#75273B", "#E7728E", "#C6DDE4", "#9A7F4D", "#53645D", "#D1836E", "#79566A", "#D1DCD8", "#295765", "#E04F71", "#F3D5A1", "#A0604E"];

// 提取数值并计算中位数
const scenariosData = parseScenarios(data) || [];
const values = scenariosData.map(item => item[1]); // 假设数值在数据项的第二个位置,需根据实际结构调整
const getMedian = (arr: number[]) => {
  const sorted = [...arr].sort((a, b) => a - b); // 复制数组避免修改原数据
  const mid = Math.floor(sorted.length / 2);
  return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
};
const medianValue = getMedian(values);

const optionsBarCharthorizontal: EChartsOption = {
  legend: {},
  tooltip: {},
  dataset: {
    source: [
      ...scenariosData,
    ]
  },
  xAxis: { type: 'value' },
  yAxis: {
    type: 'category',
    inverse: true,
  },
  series: [
    {
      type: 'bar',
      realtimeSort: true,
      itemStyle: {
        color: function (params) {
          return barColors[params.dataIndex];
        }
      },
      // 添加中位数标线配置
      markLine: {
        lineStyle: {
          type: 'dashed', // 设置为虚线
          color: '#333' // 自定义虚线颜色
        },
        label: {
          show: true,
          formatter: 'Moyenne', // 标签文本
          position: 'end', // 标签位置,可选'start'/'middle'/'end'
          fontSize: 12
        },
        data: [
          {
            xAxis: medianValue // 指向x轴的中位数数值
          }
        ]
      }
    }
  ]
}

注意:如果你的dataset数据结构和示例不同(比如数值在其他索引位置),需要调整values提取的逻辑;也可根据需求修改markLine的颜色、虚线样式、标签位置等参数。

内容的提问来源于stack exchange,提问作者Aspiring Dev 23000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:08:34