上Highcharts渲染正確定位我有我想要自定義形狀添加到基於該條價值和位置的Highcharts條形圖。首先,我試圖使用highcharts.renderer.path,爲每個條添加一條線條,與條形一樣高,位於X軸上,基於硬編碼值。這裏是我的意思圖片:用條形圖
這應該是容易的,它是當chart.type =「列」。在高圖回調中,我將在每個欄上使用getBBox(),並使用translate()將x軸值轉換爲像素值。
然而,試圖用chart.type =「欄」要做到這一點,當我碰到的一些問題。首先,切換所有的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值都會在點之間混合起來。在小提琴中注意顏色與位置不匹配。我創建了一個issue on GitHub。
當有隻差一分,這不是一個問題。當有兩點時,我可以輕鬆切換值以獲得正確的定位。但是,如果有3個或更多的點,我似乎無法弄清楚值如何混淆的邏輯。
第三個問題,就是翻譯的功能似乎並沒有在X軸工作了柱狀圖,即使它在y軸。
chart.yAxis[0].translate(4); // correct for bottom axis
chart.xAxis[0].translate(1); // incorrect for side axis
是否有另一種方法來實現我在找什麼?我在那小提琴中錯過了什麼,這實際上不是一個錯誤?
@zacarybrown發現,至少getBBox()的x值是反轉的條形圖:https://twitter.com/zacarybrown/status/332121728916529153 – simpixelated 2013-05-08 15:53:30