3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
由于您的函數(shù)中有一個(gè)關(guān)系條件,它總是會(huì)取較大的值。你可以代替分別計(jì)算出兩個(gè)結(jié)構(gòu)域?yàn)閟tartupMagnitude和magnitude,然后聯(lián)合的盤區(qū)(分別取最小值和最大范圍內(nèi)的值,的最小值和最大值)。
const magnitude = d3.extent(data, d => d.magnitude);
const startup = d3.extent(data, d => d.startupMagnitude);
const yDomain = [
d3.min([magnitude[0], startup[0]]),
d3.max([magnitude[1], startup[1]])
];
或者,單分配版本,利用您只是聯(lián)合范圍:
const yDomain = d3.extent([
...d3.extent(data, d => d.magnitude),
...d3.extent(data, d => d.startupMagnitude)
]);
另一種方法是先聯(lián)合數(shù)據(jù),然后計(jì)算范圍:
const yDomain = d3.extent([
...data.map(d => d.magnitude),
...data.map(d => d.startupMagnitude)
]);
這些不混合計(jì)算與所述最小/最大/程度的D3方式不同的語(yǔ)義的Math.min/ Math.max,例如。如果數(shù)組為空,則處理字符串、空值和結(jié)果。在這方面,最后一個(gè)版本最忠實(shí)于 D3 方式,因?yàn)樗褂脝蝹€(gè)d3.extent.

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
有幾種方法可以計(jì)算yDomain到位。您的顯然有效,但可以顯著簡(jiǎn)化:
var yDomain = [
d3.min(data, d => Math.min(d.magnitude, d.startupMagnitude)),
d3.max(data, d => Math.max(d.magnitude, d.startupMagnitude))
];
對(duì)于任何數(shù)據(jù)點(diǎn),此方法分別使用/來(lái)檢查任何值magnitude或startupMagnitude更小/更大。然后利用并計(jì)算這些值的全局范圍。Math.min()Math.max()d3.min()d3.max()

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
這就是我分別計(jì)算啟動(dòng)幅度和幅度的兩個(gè)域的方式,然后比較最大值和最小值并創(chuàng)建 yDomain。
我不確定這是正確的還是有任何其他 d3 方法,
var yDomainMagnitude = d3.extent(data, function(d) {
return d.magnitude;
});
var yDomainStartupMagnitude = d3.extent(data, function(d) {
return d.startupMagnitude;
});
var max =
d3.max(d3.values(yDomainMagnitude)) >
d3.max(d3.values(yDomainStartupMagnitude))
? d3.max(d3.values(yDomainMagnitude))
: d3.max(d3.values(yDomainStartupMagnitude));
var min =
d3.min(d3.values(yDomainMagnitude)) <
d3.min(d3.values(yDomainStartupMagnitude))
? d3.min(d3.values(yDomainMagnitude))
: d3.min(d3.values(yDomainStartupMagnitude));
var yDomain = [min, max];
添加回答
舉報(bào)