我有一个Highcharts条形图,我正在尝试根据条形值和位置添加自定义形状。首先,我只是尝试使用 highcharts.renderer.path为每个条添加一条线,与条一样高,根据硬编码值定位在 x 轴上。这是我的意思的图片:
这应该很容易,就是chart.type = "column"的时候。在 highcharts 回调中,我将在每个条形图上使用getBBox() ,并使用translate()将 x 轴值转换为像素值。
但是,在尝试使用 chart.type = "bar" 执行此操作时遇到了几个问题。首先,切换所有 x 和 y 值(我假设这是作者首先从柱形图创建条形图的方式)。图表的所有属性也是如此:plotLeft 现在是顶部,plotTop 现在是左侧。
这应该有效:
function (chart) {
$.each(chart.series[0].data, function (pointIndex, point) {
var plotLine = {},
elem = point.graphic.element.getBBox(),
yStart,
xStart,
newline;
yStart = chart.plotTop+elem.x;
xStart = chart.plotLeft+elem.height;
plotLine.path = ["M", xStart, yStart+1, "L", xStart, yStart+point.pointWidth];
plotLine.attr = {
'stroke-width': 1,
stroke: point.color,
zIndex: 5
};
newline = chart.renderer.path(plotLine.path).attr(plotLine.attr).add();
});
});
完整示例:http: //jsfiddle.net/Bh3J4/9/
第二个问题可能是无法克服的错误。似乎当有多个数据点时,所有的 x 和 y 值都会在这些点之间混合。请注意小提琴中的颜色与位置不匹配。我在 GitHub 上创建了一个问题。
当只有一点时,这不是问题。当有两点时,我可以轻松地切换值以获得正确的定位。但是,当有 3 个或更多点时,我似乎无法弄清楚这些值如何混淆的逻辑。
第三个问题是,translate 函数似乎不适用于条形图的 xAxis,即使它适用于 yAxis。
chart.yAxis[0].translate(4); // correct for bottom axis
chart.xAxis[0].translate(1); // incorrect for side axis
有没有另一种方法来实现我正在寻找的东西?我是否在那个小提琴中遗漏了实际上不是错误的东西?