D3.js 更改dc.js散点图Y轴标签上文本的数值

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” 我

我有一个散点图,在我的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点。