第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何使用對數(shù)(符號)刻度為 yAxis 設(shè)置刻度?

如何使用對數(shù)(符號)刻度為 yAxis 設(shè)置刻度?

動漫人物 2022-09-29 10:48:47
以下是使用d3.v5在我的圖表上的yAxis代碼:    let x = d3.scaleTime()        .domain(d3.extent(data, d => d.date))        .range([margin.left, width - margin.right])    let y = d3.scaleSymlog()        .domain([0, d3.max(data, d => d.Confirmed)]).nice()        .range([height - margin.bottom, margin.top])    let line = d3.line()        .defined(d => !isNaN(d.value))        .x(d => x(d.date))        .y(d => y(d.value))    let xAxis = g => g        .attr("transform", `translate(0,${height - margin.bottom})`)        .call(d3.axisBottom(x).ticks(width / 80).tickSizeOuter(0))    let yAxis = g => g        .attr("transform", `translate(${margin.left},0)`)        .call(d3.axisLeft(y))        .call(g => g.select(".domain").remove())        .call(g => g.select(".tick:last-of-type text").clone()            .attr("x", 3)            .attr("text-anchor", "start")            .attr("font-weight", "bold")            .text(data.y))    let svg = d3.select('#MultiLineLogChart').select("svg")    svg.attr("viewBox", [0, 0, width, height])        .attr("fill", "none")        .attr("stroke-linejoin", "round")        .attr("stroke-linecap", "round");    svg.append("g")        .call(xAxis);    svg.append("g")        .call(yAxis);這是我的對數(shù)圖表的鏈接:https://covid19wiki.info/country/Canada
查看完整描述

1 回答

?
慕村9548890

TA貢獻1884條經(jīng)驗 獲得超4個贊

您看到的問題是 Symlog 音階的一個持續(xù)存在的問題:https://github.com/d3/d3-scale/issues/162

您可以在這個簡單的演示中看到它:

const svg = d3.select("svg");

const scale = d3.scaleSymlog()

  .domain([0, 100000])

  .range([140, 10]);

const axis = d3.axisLeft(scale).ticks(4)(svg.append("g").attr("transform", "translate(50,0)"));

<script src="https://d3js.org/d3.v5.min.js"></script>

<svg></svg>

以下是可能的解決方案:

  • 更改 D3 源代碼,如 GitHub 鏈接中所述;

  • 為自己設(shè)置一個足夠刻度值的數(shù)組,您將傳遞給axis.tickValues;

  • 使用 Log 刻度,其中域從 1 開始而不是從零開始。

最后一個選項似乎是一個黑客,但它是迄今為止最簡單的,并且鑒于您的最高價值如此之大,從視覺上講,它不會對dataviz產(chǎn)生任何影響。在這里:

const svg = d3.select("svg");

const scale = d3.scaleLog()

  .domain([1, 100000])

  .range([140, 10]);

const axis = d3.axisLeft(scale).ticks(4).tickFormat(d => d3.format("")(d))(svg.append("g").attr("transform", "translate(50,0)"));

<script src="https://d3js.org/d3.v5.min.js"></script>

<svg></svg>


查看完整回答
反對 回復(fù) 2022-09-29
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號