2014-01-30 33 views
0

我正在使用x轴上的时间标尺的条形图表上工作。D3与时间标度问题,计算项目的位置

每个柱代表当月的所有日期都设置好的如YYYY-MM,当我加载数据我分析它:

var parseDate = d3.time.format("%Y-%m").parse; 

的问题是,每个月有着怎样不同的天量的,在一些酒吧比较接近的其他人而不是所有相同的保证金,你可以在这个截图中看到:

barchart

在这里你可以找到的代码,http://tributary.io/inlet/8700564

由于

+0

y轴上的数据是什么?根据它是什么,我们可以规范化每个元素的宽度。例如X在某个月发生了多少次。其本月的销售额为 –

+0

。每个月只会有一个酒吧。 –

+0

由于本月的天数无关紧要,因此简单地将每个栏的宽度设置为某个静态值。例如,它们都可以是40个像素。改变第124行:'var barWidth = 40;'它们的宽度都是一样的。 http://tributary.io/inlet/8716416 –

回答

0

您有两种选择:要么使用序数(类别)比例为x轴,这将给所有条的宽度相同,或设定各条单独基于所述长度的宽度这个月。

要计算月份的长度,可以使用d3 time intervals来获取下个月的开始日期。然后,宽度就是xScale上两个日期位置之间的差异,可能通过填充进行调整,以在条之间留出一些空间。

rect.attr("x", function(d){return xScale(d.date) + padding;}) 
    .attr("width", function(d){ 
       return xScale(d3.time.month.offset(d.date, 1)) 
        - xScale(d.date) 
        - 2*padding; 
     }); 
+0

问题是不是酒吧的宽度,它是酒吧之间的空间。如果你看到第二个(二月)和第三个(三月)之间没有空间(因为二月有28天),但在其他空间之间有一个空间,但它不同(大约1像素和一些2像素aprox)有30天或31天。 –

+0

根据您添加的“填充”,我给出的方法会给出相等的间距,方法是通过改变条宽以适应月份的宽度。如果你想要等间距*和*等宽直线,可以使用序数比例,就像大多数条形图的例子一样,[像这样](http://bl.ocks.org/mbostock/3885304)。 – AmeliaBR