blackocean
49 天前
帮你问 GPT 吧。
实现的核心思路是:利用 ECharts 的辅助标记功能( markLine )来绘制这条线。由于 markLine 可以附加在系列上,我们可以采用两种方式实现:
[方案一] 在原有柱状图的系列中加 markLine
缺点是 markLine 的“数据”一般是用来标示某个值(例如平均值、最大值……),而这里我们需要的标线位置应位于两根柱的分界处; 因为类别轴默认取每个类别的中心位置,所以“1-20”对应位置下标为 0 ,“20-40”位置为 1 ,“40-80”为 2 。两根柱之间的分界位置则对应 0.5 (“1-20”和“20-40”之间)或其他小数。
[方案二] 增加一个“虚拟”系列(比如 scatter 系列,数据为空)专门绘制 markLine 。
这种方法比较灵活,不会干扰真正的业务数据。我们在该系列中用 markLine 绘制一条从图表最左边到最右边的辅助线,并在其中指定其所在的 y 坐标为 0.5 (即位于第 0 和第 1 位置之间)。同时为 markLine 配置 tooltip 和 label ,从而鼠标经过时显示“限速 40”。
这里推荐方案二,代码示例如下:
/* JavaScript 示例代码 */
var myChart = echarts.init(document.getElementById('chart'));
var option = {
tooltip: {
// 主提示框可以配置成 axis 触发(也可以是 item ),但这里我们希望 markLine 自己有 tooltip
trigger: 'axis'
},
grid: {
left: '10%',
right: '10%',
bottom: '15%',
top: '10%'
},
xAxis: {
type: 'value',
name: '车辆数'
},
yAxis: {
type: 'category',
data: ['1-20', '20-40', '40-80'],
name: '区间'
},
series: [
{
name: '车辆数量',
type: 'bar',
data: [120, 200, 150] // 每个区间的车辆数
},
// 增加一个虚拟 scatter 系列,用来绘制辅助线
{
type: 'scatter',
// data 留空(或设置为 [])后只显示 markLine
data: [],
markLine: {
// 这里设置 markLine 线的样式、tooltip 和 label
tooltip: {
// marker: 图形标识符(可选),formatter 指定显示文本
formatter: '限速 40'
},
label: {
show: true,
formatter: '限速 40',
position: 'middle', // 在线上中间显示文字
color: '#f44336'
},
lineStyle: {
color: '#f44336',
width: 2,
type: 'solid'
},
// 数据格式为二维数据:数组内包含一组起始点和终止点
// 由于 y 轴为类目轴,数值型 y (如 0.5 )会被转换为类目轴的对应位置,
// 这里 0.5 即在第一根柱和第二根柱中间(因为各类别的中心分别位于 0 、1 、2 )
data: [
[
{ coord: [0, 0.5] },
{ coord: ['max', 0.5] }
]
]
}
}
]
};
myChart.setOption(option);