D3.js 更改dc.js散点图Y轴标签上文本的数值
我有一个散点图,在我的X轴上描绘每个日期的独特事件,以及它们在每一天发生的时间,第二天,在Y轴上 为了实现这一点,我获取了用于X轴的日期数据,并通过一个函数运行它,该函数将输出事件发生当天的精确秒数(0到86400)。从这个意义上说,我的Y轴从0秒到86400秒 这使我能够在图表上以一个点表示每一个点,直到第二个点 我对图表的结果非常满意: 唯一的问题是我的Y标签从0变为86400。我想将文本更改为熟悉的HH-AM/PM格式,可能是“0到23,其中ie:if(y值=3600)返回“1am” 我的散点图如下所示:D3.js 更改dc.js散点图Y轴标签上文本的数值,d3.js,charts,scatter-plot,dc.js,axis-labels,D3.js,Charts,Scatter Plot,Dc.js,Axis Labels,我有一个散点图,在我的X轴上描绘每个日期的独特事件,以及它们在每一天发生的时间,第二天,在Y轴上 为了实现这一点,我获取了用于X轴的日期数据,并通过一个函数运行它,该函数将输出事件发生当天的精确秒数(0到86400)。从这个意义上说,我的Y轴从0秒到86400秒 这使我能够在图表上以一个点表示每一个点,直到第二个点 我对图表的结果非常满意: 唯一的问题是我的Y标签从0变为86400。我想将文本更改为熟悉的HH-AM/PM格式,可能是“0到23,其中ie:if(y值=3600)返回“1am” 我
scatterPlot
.width(window.innerWidth-100)
.height(window.innerHeight/2)
.x(d3.time.scale().domain([minDate, maxDate]))
.brushOn(false)
.mouseZoomable(true)
// .title(function (d) {
// return "Event: " + d['text'];
// })
.clipPadding(5)
.yAxisLabel("Hour of the day")
.elasticY(true)
.dimension(eventsByDateAndHourDim)
.group(eventsByDateAndHourGroup);
我试着这样做:
scatterPlot.yAxis().tickFormat(function (d) {
if (domain = 43200)
return "12 PM";
})
但这只会将所有标签更改为“12 PM”。我不确定如何引用我的Y域的实际值
我尝试使用组“if(eventsByDateAndHourGroup=43200)…”但也不起作用。传递给的函数的参数是需要格式化的Y坐标 所以你应该可以做一些类似的事情
scatterPlot.yAxis().tickFormat(function (d) {
var hour = Math.floor(d/3600),
pm = hour > 11;
if(pm) hour -= 12;
if(hour === 0) hour = 12;
return String(hour) + (pm ? ' PM' : ' AM');
});
或者,您可以使用d3.time.format.utc
来获得更强健、更优雅的解决方案:
var hourFormat = d3.time.format.utc('%I %p');
scatterPlot.yAxis().tickFormat(function (d) {
var date = new Date(d*1000);
return hourFormat(date);
});
这有点不太有效,因为
Date
对象速度慢,但处理十几个刻度可能无关紧要。您的方法正确。您的tickFormat
函数中有语法错误,我假设它缺少“域”{
“?此函数将传递Y值,因此可能我不清楚您的问题。抱歉,我复制和粘贴错误!函数为:scatterPlot.yAxis().tickFormat(函数(d){if(domain=43200)返回“12 PM”;})但是,很难在评论上正确设置格式!我已经编辑了主要的帖子文本以反映修改。尽管如此,所有标签都是下午12点。