亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對數刻度偶爾會產生數百個刻度

對數刻度偶爾會產生數百個刻度

慕俠2389804 2023-03-24 15:07:38
我正在嘗試創建一個等高線圖,其色標使用對數刻度。scaleLog().domain([1.8e-7, 0.017]);對于大多數域,它會生成 5 - 9 個刻度。但在上面的示例中,它返回了 70 左右。域通常是未知的,所以我不能對它們進行硬編碼。兩者.nice()似乎都.ticks()對結果沒有影響。有沒有好的方法來限制刻度數,或者直接設置數字?編輯:我最終通過編寫一個遞歸函數來解決我的問題,該函數減少了 ticks 參數,直到達到我的最大值以下的數字: const logScale = scaleFunction().domain([domainMin, domainMax]).nice();const getThreshholds = (requestedTicks: number) => {  const tickscale = logScale.ticks(requestedTicks);  if (tickscale.length <= maxTicks) {    return tickscale;  }  return getThreshholds(requestedTicks - 1);};const thresholds = getThreshholds(maxTicks);
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

不幸的是,你現在看到的...

const s = d3.scaleLog().domain([1.8e-7, 0.017]);

console.log(s.ticks())

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

...是預期的結果(重點是我的):

對數刻度的特殊之處還在于 scale.ticks會忽略指定的計數 ( source )。

因此,一種可能的解決方案是使用 過濾刻度scale.tickFormat()。例如,保持 10 個刻度:

const s = d3.scaleLog().domain([1.8e-7, 0.017]);

const format = s.tickFormat(10);

console.log(s.ticks(10).filter(format));

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>


查看完整回答
反對 回復 2023-03-24
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號