2016-08-24 68 views
0

我正在創建一個包含某些連續天數的每日數據的圖表。數據數組中的每個對象都有一個日期屬性,這是當天午夜的JavaScript日期表示。下面是相關代碼:d3.timeDay.every(步驟)每個月重置一次,導致軸標籤碰撞

const x = d3.scaleTime() 
    .range([0, width]) 
    .domain(d3.extent(data.map(d => d.date))); 

    const days = data.length; 
    let interval = 1; 
    while (width/(days - 1) * interval < 60) { 
    interval += 1; 
    } 

    const xAxis = d3.axisBottom(x) 
    .tickFormat(d3.timeFormat('%b %d')) 
    .ticks(d3.timeDay.every(interval)); 

的問題是,d3.timeDay.every(間隔)重置在每個月的開始。 d3文檔清楚地指出了這一點,所以它不是一個錯誤。

不幸的是,當日期跨越月份邊界時,會導致滴答聲和標籤太接近。

有沒有辦法讓X軸(這是一個scaleTime)在每個間隔天創建滴答而不管月份邊界?

回答

1

好的,問這個問題讓我關注。我找到了答案。我需要提供自己的刻度值。這工作:

const xValues = data.filter((d, i) => i % interval === 0).map(d => d.date); 

    const xAxis = d3.axisBottom(x) 
    .tickFormat(d3.timeFormat('%b %d')) 
    // .ticks(d3.timeDay.every(interval)) 
    .tickValues(xValues); 

我是初學者與D3,並會歡迎更好的答案。