更新:已解決
你們中的大多數人可能不記得我之前的問題,圓形未正確更新具有兩級嵌套資料的多折線圖。我設法在那里找出/解決了我的問題(盡管我仍然不相信我想出的東西是 100% 正確的);但是,我現在有另一個問題。
我的 y 軸資料 (d.mval) 具有極端的例外值。結果,我的圖表被壓縮,有相當多的空白空間。例如,請參閱此 JSFiddle 中的“現金流量”圖表:https ://jsfiddle.net/etonblue/a98m52k4/3/ 。我嘗試了中值、均值、平均值、標準差等的各種組合來嘗試設定域,但還沒有找到對我的所有資料始終有效的解決方案。所以我對我的域進行了硬編碼:
if (val == 1) {ydom = [-2,20]}
else if (val == 2) {ydom = [-40,240]}
else if (val == 3) {ydom = [-.5,1.5]}
else if (val == 4) {ydom = [-.6,.9]}
else if (val == 5) {ydom = [-.6,.6]}
else if (val == 6) {ydom = [-.16,.16]}
else if (val == 7) {ydom = [-.5,3]}
else if (val == 8) {ydom = [-1000000,2000000]}
else if (val == 9) {ydom = [-1000000,2000000]}
else if (val == 10) {ydom = [-4,10]}
這不僅丑陋,還意味著任何極端值現在都遠高于或遠低于我顯示的 y 軸。
我的問題是,有沒有辦法使用 D3 將顯示值限制在域的最大值/最小值,同時保留實際值(以便工具提示顯示實際值而不是顯示值)?
我目前正在使用 d3.v4。
更新 解決方案:
var line = d3.line()
.x(d => x(d.year))
.y(d => d.mval < y.domain()[0] ? y(y.domain()[0]) : d.mval > y.domain()[1] ? y(y.domain()[1]) : y(d.mval))
和
.attr("cx", d => x(d.year))
.attr("cy", d => d.mval < y.domain()[0] ? y(y.domain()[0]) : d.mval > y.domain()[1] ? y(y.domain()[1]) : y(d.mval))
在這里更新小提琴:https : //jsfiddle.net/etonblue/6v924ory/2/。
上面的代碼將 y 軸值(在這種情況下:d.mval)限制在域本身的最小值 (y.domain()[0]) 或最大值 (y.domain()[1]) 而不是更改 d.mval 的“實際”值(因此可以在工具提示中使用)。
現在我只需要弄清楚為什么我的更新功能無法正常作業(例如,如果您單擊“年度注冊變化百分比”功能,您可以在圖表底部看到兩條清晰的綠線(沒有點)從“當前比率”圖表中剩余)。然而,這可能需要一個單獨的問題。
啊。總是有事。
謝謝你的回答,我不確定我自己是否會想到這一點。
uj5u.com熱心網友回復:
您提供的代碼與解決方案不太相關。從你的小提琴開始,解決方案是在你的線和圓的 y 位置的回呼中。對于您的線路:
var line = d3.line()
.x(d => x(d.year))
.y(d => d.mval > 240 ? y(240) : y(d.mval)) //If mval is over 240 plot 240
同樣對于您的圈子 cy:
.attr('cy', d => d.mval > 240 ? y(240) : y(d.mval))
更一般地,您可以使用回呼:
d => d.mval > y.domain()[1] ? y(y.domain()[1]) : y(d.mval)
我不明白你的設定,
uj5u.com熱心網友回復:
d3 縮放所需的不僅僅是clamp() 選項嗎?這將阻止域 --> 范圍轉換超過范圍的最小值/最大值。
https://github.com/d3/d3-scale#continuous_clamp
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/359431.html
標籤:javascript d3.js
上一篇:d3版本好像是更高版本?
