2012-11-30 64 views

回答

2

當然,我創建了一個基於關麥克·博斯托克的帖子小提琴上reusable chartshttp://jsfiddle.net/C5gYv/

基本上我做的是檢查,如果數據是正還是負,然後分別設定y 0和y:

area = d3.svg.area() 
     .x(X) 

    ... 

     g.select(".area").attr("d", 
      area.y1(function (d) { 
       // the highest point 
       if (d[1] <= 0) { 
        return yScale(0); 
       } else { 
        return Y(d); 
       } 
      }) 
       .y0(function (d) { 
       // the lowest point 
       if (d[1] <= 0) { 
        return Y(d); 
       } else { 
        return yScale(0); 
       } 
      })); 

希望有幫助!

+0

我很樂意看到更好的解決方案。我寫這篇文章似乎有點過分。 – Hardbyte

+0

非常感謝您的幫助,Hardbyte!你在這裏發佈的代碼有助於在最後一分鐘演示前爲我節省幾個小時的睡眠時間。並感謝Santa_612提出問題。 :) – Tilek

6

這是一個古老的問題,但我認爲我或許能夠爲其他任何人登陸光明。設置您的svg區域時,只需將y0設置爲您的圖表0行位置即可。例如:

d3.svg.area() 
    .x(function(d) { 
    return x(d.x); 
    }) 
.y0(function() { 
    return y(0); 
}) 
.y1(function(d) { 
    return y(d.y); 
}); 

希望這有助於!

+0

謝謝!是否有可能用另一種顏色填充陰性區域? –