2012-09-20 77 views
1

我這裏有一個線型圖:http://jsbin.com/ugexag/1gRaphael圖書館 - 線型圖與多條線路,各個提示

可以在jsbin看,當你將鼠標懸停在一個「列」的數據,每一行通過顯示在工具提示hoverColumn()函數。我很想找到一種方法來讓工具提示僅在單個數據點懸停時出現。在gRaphael文檔中我沒有看到任何關於此的信息。

+0

我已經非常輕微抵消每條線的情節點取得了理想的結果,但它是非常煩躁。如果我進一步抵消,視覺上可以注意到這些情節是抵消的,而且看起來很糟糕。也許進一步抵消,然後重新定位是祕密,但不知道如何實現這一點。 http://jsbin.com/ugexag/2 – Unfortunately

回答

2

有樣的linechart demo右下方象限的這個例子的。 我今天晚些時候看看它,並在這裏更新我所找到的內容。我懷疑hoverColumn不使用,或者是創造性地運用,因爲當我用它,我得到了懸停事件y是所有y值對x列的平均值。

更新:看完它後,我發現你找到了什麼,訣竅是隻有一個演示列排隊在兩條線。如果你每年都繪製圖表,你的年份列肯定會在所有行上重現。所以這不太方便。

我測試的是(在該線型圖演示控制檯連接):

var r = Raphael("holder"); 
var lines = r.linechart(330,250,300,220,[ 
    [ 1, 2, 3, 4, 5, 6, 7],[ 2, 3, 4, 5, 6, 7, 8],[9,10] 
    ],[ 
    [10,10,10,10,10,10,10],[20,20,20,20,20,20,20],[5,25] 
    ],{nostroke:false, axis:"0 0 1 1", symbol: "circle", smooth: true}); 
lines.hoverColumn(function(){ 
    this.tags=r.set(); 
    for(var i=0;i<this.y.length;i++){ 
     this.tags.push(r.tag(this.x,this.y[i],this.values[i],160,10).insertBefore(this)); 
    } 
    }, function(){ 
    this.tags && this.tags.remove(); 
    }); 

至少說明了問題。問題確實在於hoverColumn和文檔。沒有提到hover其實大部分信息都是一樣的傳遞給它的this。所以,你可以重寫了最後陳述爲:

lines.hover(function({ 
    this.tags=r.set(); 
    this.tags.push(r.tag(this.x,this.y,this.value,160,10).insertBefore(this)); 
}, function(){ 
    this.tags && this.tags.remove(); 
}); 

注意value現在是單數和不帶指數,也沒有y
最後你可以通過刪除使用set()的進一步簡化它:

lines.hover(function(){ 
    this.tag = r.tag(this.x,this.y,this.value,160,10).insertBefore(this); 
}, function(){ 
    this.tag && this.tag.remove(); 
}); 
+0

是的,這也正是在那裏我想出如何在首位添加標籤:)如果您發現該示例中,倒數第二個「標記」其實是兩個標籤一次,因爲它們是同一個垂直軸。我所有的數據點都在同一個垂直軸上,這樣會讓事情變得棘手。感謝您的回答! – Unfortunately

+0

@Unfortunately我有一個使用'hover',而不是'hoverColumn'但尋找到這一點,並發現軸上的範圍,在軸線上的標記和網格線是不可配置不定製gRaphaël後,我修復要去建議你看一下谷歌圖表工具https://developers.google.com/chart/interactive/docs/roles#tooltiprole – dlamblin

+0

雖然我不是特別擔心與源順藤摸瓜,使這項工作,我認爲最後我會尋找另一個圖書館。目前我傾向於D3。現在雖然我會繼續使用g.Raphael.js,並省略我圖表的MVP版本的標籤。謝謝你的幫助! – Unfortunately