我正在使用 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/
谢谢