使用scaleBand显示基于时间的轴刻度值

时间:2019-04-23 19:23:06

标签: javascript d3.js charts

我正在使用 d3版本5.9.2 ,并在条形图中绘制数据,该条形图是一组对象,用于指定每小时从设备读取的读数。 JSON看起来像这样。如您所见,date的值是年,月,日,然后是小时:

[
    { date: "2019-01-01 0", value: 100 }, 
    { date: "2019-01-01 1", value: 150 }, 
    { date: "2019-01-01 2", value: 75 }, 
    ...
]

我正在使用scaleBand()来定义X比例尺,如下所示:

var coX_Chart = d3.scaleBand().range([0, coChartCanvasWidth]);

我正在这样显示X轴标签:

var coXAxis_Chart = d3.axisBottom(coX_Chart)
                      .scale(coX_Chart);

结果是它将每个轴刻度显示为date字段中的值。我知道我可以通过tickFormat()函数进行调整,但是我希望它更智能,因为加载到此图表中的数据是基于用户选择的。用户可以选择查看一天,一周,一个月,甚至是多年的数据。

我已经使用scaleTime()完成了图表,并且默认的刻度标签已经足够智能,可以根据数据的粒度显示日期,小时或月份等(无论用户是否查看1天)或一年的价值。

我的问题:如何在使用scaleBand()的条形图中获得这种水平的灵活性/智能?

提琴:https://jsfiddle.net/23049auv/4/

谢谢

0 个答案:

没有答案