我已經接受了塞巴斯蒂安的答案,我在這裏公佈其實施:
我創建了一個函數,它使用第一個系列的數據和第二個系列中的數據的修改版本生成一個類型爲'arearange'的虛擬系列,以便將它們映射到主yAxis :
/**
*generate a dummy arearange series in order to fill area between our two series.
*/
function createRangeSerie(data1, min1, max1, data2, min2, max2)
{
//we will apply a linear transfomation to values from the second series
var b = min1-min2;
var a = (max1 - b)/max2;
var rangeData = [];
$.each(data1, function(index, value) {
var value2 = a*data2[index] + b;
rangeData.push([value, value2]);
});
//return the third series, used to fill the area between our 2 series.
return {
name: 'areaRangeSerie',
type: 'arearange',
data: rangeData
};
};
然後,我用它來添加新的領域在我的圖表中看到此提琴例如:
http://jsfiddle.net/2me4Z/3/
再次感謝你們!
限制: 我怕什麼發生:在情況下,我想只有在第一條曲線是第二次(或反之亦然)下,以填補。在相鄰的點上有問題。正如你在updated JSfiddle中看到的那樣。所以這個解決方案還不完善,我會改進它。
最後版本: 在我的最終版本中,我添加了交叉點到我的arearange系列。現在結果是完美的。你可以看到算法here in this JSFiddle 的結果,你可以看到,I4ve改變了xAxis,所以我得到了計算值而不是類別。
編輯:這裏是找到兩條線(每條線都由兩個點定義,所以我們需要4個參數:line1Point1 line1Point2,line2Point1,line2Point2)的交點函數。我不起訴像素座標,但我從我的x和y值計算交集,因爲結果點將以相同的方式由高圖庫進行映射。
function intersectionPoint(l1Pt1, l1Pt2, l2Pt1, l2Pt2){
console.log(l1Pt1, l1Pt2, l2Pt1, l2Pt2);
//compute A B and C for the first line: AX + BY = C
A1 = l1Pt2.y-l1Pt1.y;
B1 = l1Pt1.x-l1Pt2.x;
C1 = A1*l1Pt1.x + B1 *l1Pt1.y;
//compute A B and C for the second line
A2 = l2Pt2.y - l2Pt1.y;
B2 = l2Pt1.x - l2Pt2.x;
C2 = A2*l2Pt1.x + B2*l2Pt1.y;
var delta = A1*B2 - A2*B1;
if(delta == 0) {
console.log("Lines are parallel");
return null;
}
else
{
return {
x: (B2*C1 - B1*C2)/delta,
y: (A1*C2 - A2*C1)/delta
};
}
};
我真的很期待highchart給它一個完整的官方支持,因爲它使用數軸 X(
它們是否絕對需要具有相同的範圍(最大/最小值)?正如您在我的示例中看到的,這兩個系列沒有完全相同的yAxis。他們只在xAxis上分享相同的時間間隔。無論如何,我會試一試,然後發送反饋。 – Guian
我知道,但在其他情況下,你需要規範化點(如jlbriggs)發佈,以有一系列極其正確的範圍爲區域範圍系列。 –
是的,我會盡力去做。我希望Highchart能爲它提供更好的解決方案。 – Guian