避免在d3js轴重复日期 [英] Avoid duplicate dates in d3js axes

查看:128
本文介绍了避免在d3js轴重复日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有很多图表是动态生成的。对于某些图表,日期彼此接近,因此轴标签正在重复。

I have many charts being generated dynamically. For some charts, the dates are near each other, so, axis labels are getting repeated

示例:

使用的日期格式:

d3.time.format("%d-%b-%y")

是否有内置的方法来避免重复的标签?还是有一个很好的通用程序,可以避免这样的重复?
请注意,我的图表也有缩放功能,传入的数据是动态的,所以我不能输入硬编码的值ticks或tickValues。

Is there an in-built way to avoid duplication of labels? Or is there a good generic procedure which can avoid such duplication? Note that my charts have zooming feature also and the incoming data is dynamic, so I can't put in hardcoded values of "ticks" or "tickValues". Generating ticks or tickValues dynamically, could be the way to go.

推荐答案

感谢@Lars Kotthoff帮助。这是基本的解决方案:

Thank you @Lars Kotthoff for helping out. This is the basic solution:

var ticks = scale.ticks(userSpecifiedTicks);
var nonDuplicateTickValues = [];

var tickAlreadyExists = function(tickValIn)
{
    for(var i=0;i<nonDuplicateTickValues.length;i++)
    {
        var t = nonDuplicateTickValues[i];
        var formattedTickValIn = formatter(tickValIn);
        var formattedTickVal = formatter(t);
        if(formattedTickValIn == formattedTickVal)
            {return true;}

    }
    return false;
};

var removeDuplicateTicks = function()
{
    for(var i=0;i<ticks.length;i++)
    { 
        var tickVal = ticks[i];
        if(!tickAlreadyExists(tickVal))
        {
            nonDuplicateTickValues.push(tickVal);
        }
    }
};

scale.tickValues(nonDuplicateTickValues);

这里,格式化程序可以是任何函数:

Here, formatter could be any function like:

var formatter = function(d){
    var format = d3.time.format("%d-%b-%y");
    return format(d);
}

这篇关于避免在d3js轴重复日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆