D3.js D3基于时间的刻度溢出轴

D3.js D3基于时间的刻度溢出轴,d3.js,D3.js,我一直在做一个类似于本例的堆叠条形图,但是运行D3V4,如图中所示 然而,正如您在小提琴中看到的,我有一个问题,图形中的最后一个元素延伸出轴的末端。我是说,我想这是有道理的。但我不确定如何在图形中显示此内容,并确保所有元素都适合提供的图形宽度 我假设我需要修改x轴的域,它当前是 x.domain(d3.extent(data, function(d) { return d.Date; })); 但是除了手动添加一个额外的数据点,在随后的日期中没有数据,我不知道如何管理它。如果有人能提供任何指导

我一直在做一个类似于本例的堆叠条形图,但是运行D3V4,如图中所示

然而,正如您在小提琴中看到的,我有一个问题,图形中的最后一个元素延伸出轴的末端。我是说,我想这是有道理的。但我不确定如何在图形中显示此内容,并确保所有元素都适合提供的图形宽度

我假设我需要修改x轴的域,它当前是

x.domain(d3.extent(data, function(d) { return d.Date; }));

但是除了手动添加一个额外的数据点,在随后的日期中没有数据,我不知道如何管理它。如果有人能提供任何指导,我们将不胜感激

对于条形图,最好使用。它计算条的大小、位置和填充

var x = d3.scaleBand()
    .range([0, width])
    .padding(0.05);
以下是更新的小提琴:
对于条形图,最好使用。它计算条的大小、位置和填充

var x = d3.scaleBand()
    .range([0, width])
    .padding(0.05);
以下是更新的小提琴:

实际上,代码本身没有什么问题。这里的问题正是时间尺度的概念,以及使用这种尺度的条形图

如果你仔细观察小提琴,每一条线都从它应该开始的地方开始,也就是说,每一条线的
x
值对应于x轴上的时间值。但条形图有一个宽度,问题就在这里:当你将宽度设置为18px(或任何其他值)时,条形图将溢出时间刻度。这是正常的,也是意料之中的

时间刻度应与点一起使用,其中每个点(ADI)正好位于时间刻度的正确位置,或与一条线一起使用,该线只是一条连接点的路径

说到这里,你有两个选择:

  • 使用序数刻度。条形图不应使用时间刻度,时间刻度也不应与条形图一起使用。例如,博斯托克的代码使用了一个顺序标度:

    var x = d3.scale.ordinal()
    
  • 您可以使用
    scaleOrdinal
    或者更好的方法是使用
    scaleBand

  • 如果您想保持时间刻度,请将图表更改为折线图。从技术上讲,折线图是在时间间隔内可视化数据趋势的最佳选择

  • 实际上,代码本身并没有什么问题。这里的问题正是时间尺度的概念,以及使用这种尺度的条形图

    如果你仔细观察小提琴,每一条线都从它应该开始的地方开始,也就是说,每一条线的
    x
    值对应于x轴上的时间值。但条形图有一个宽度,问题就在这里:当你将宽度设置为18px(或任何其他值)时,条形图将溢出时间刻度。这是正常的,也是意料之中的

    时间刻度应与点一起使用,其中每个点(ADI)正好位于时间刻度的正确位置,或与一条线一起使用,该线只是一条连接点的路径

    说到这里,你有两个选择:

  • 使用序数刻度。条形图不应使用时间刻度,时间刻度也不应与条形图一起使用。例如,博斯托克的代码使用了一个顺序标度:

    var x = d3.scale.ordinal()
    
  • 您可以使用
    scaleOrdinal
    或者更好的方法是使用
    scaleBand

  • 如果您想保持时间刻度,请将图表更改为折线图。从技术上讲,折线图是在时间间隔内可视化数据趋势的最佳选择

  • 非常感谢!那太有用了!非常感谢!那太有用了!