nvd3防止y轴上的重复值

时间:2014-01-12 13:34:04

标签: d3.js nvd3.js

我的图表重复了y轴上的值。有没有办法我只能有1,2,3但之间没有任何东西(例如我的问题显示在y轴上的下图中):

enter image description here

使用的代码是这样的:

nv.addGraph(function() {
    var chart = nv.models.multiBarChart();

    chart.xAxis
        .tickFormat(function(d) { return d3.time.format('%x')(new Date(d)) });

    chart.yAxis
        .tickFormat(d3.format(',.1f'));

    d3.select('#errorsFiredByDate')
        .datum([{values: output, key: "Count by date"}])
        .transition()
        .duration(500)
        .call(chart);

        nv.utils.windowResize(chart.update);

    return chart;
});

3 个答案:

答案 0 :(得分:2)

您可以通过几个选项来控制D3轴中的刻度线。您可以使用.ticks()明确指定刻度数,但这更像是可以忽略的布局提示。如果您想完全确定滴答,请使用.tickValues()明确设置滴答值。

在你的情况下,这看起来像这样。

chart.yAxis.tickValues(d3.range(chart.yAxis.scale().domain()[0], chart.yAxis.scale().domain()[1]);

根据您的具体应用,其他确定范围的方法可能更合适。

答案 1 :(得分:1)

迟到的回复,但可能对其他人有用。我使用一种解决方法来消除重复的刻度,通过维护一组已经应用的刻度和& d3的多格式说明符。

uniqueTicks = [];
xTickFormat = d3.time.format.multi([
                                    ["%Y", function (d) {
                                        if (uniqueTicks.indexOf(d.getFullYear()) === -1) {
                                            uniqueTicks.push(d.getFullYear());
                                            return true;
                                        } else {
                                            return false;
                                        }                                        
                                    }],
                                    ["", function () {
                                        return true;
                                    }]
                                ]);

d3.svg.axis().tickFormat(xTickFormat );

这个技巧可以针对任何其他类型的刻度格式进行调整。

答案 2 :(得分:1)

我遇到了同样的问题,我在图表选项中进行了修复

    yAxis: {
      tickFormat: function(d){
        if ( (d * 10) % 10 === 0 ) {
          return d3.format('.0f')(d);
        }
        else {
          return '';
        }
      }
    }