d3.js:是否可以通过键而不是索引来排列转换?

d3.js:是否可以通过键而不是索引来排列转换?,d3.js,D3.js,我有不同长度的数据数组,其x值(年)是有限年数的一部分,例如: var data = [{Year: 2008, Value: 5}, {Year: 2009, Value: 6}] 或 现在,如果我从值较多的数据集过渡到值较少的数据集,(2007,8)点被插值到(2008,5),这看起来很奇怪。我想要的是按键插值(在本例中为年份) 我非常简单地理解了如何使用条形图,它只需将一个键函数传递给selection.data,以便按键绑定而不是索引 但是,在直线的情况下,似乎无法传递键函数,因为传递

我有不同长度的数据数组,其
x
值(年)是有限年数的一部分,例如:

var data = [{Year: 2008, Value: 5}, {Year: 2009, Value: 6}]

现在,如果我从值较多的数据集过渡到值较少的数据集,(2007,8)点被插值到(2008,5),这看起来很奇怪。我想要的是按键插值(在本例中为年份)

我非常简单地理解了如何使用条形图,它只需将一个键函数传递给
selection.data
,以便按键绑定而不是索引

但是,在直线的情况下,似乎无法传递键函数,因为传递的数据必须是数组数组(基准是点数组)


使用折线图时,如何获得类似的结果?

这取决于使用的折线生成器。简而言之,要做到这一点没有简单的方法。这里有一些选择

  • 同时调整图表的比例。这将使过渡看起来不那么奇怪
  • 把线分成几段。通过这种方式,可以删除其中一个线段,而不会影响其他线段。这可能不起作用,具体取决于您使用的插值等
  • 添加虚拟元素以填充数据数组,使其始终保持相同的长度。可能不适合,这取决于您的应用程序,因为仍会为虚拟元素绘制部分线条

这完全取决于您的应用程序哪个选项最合适(或者可能还有其他选项)。我可能会先尝试第一个,因为它很容易实现。

非常感谢您的快速回复。选项1看起来显然更简单,但从设计的角度来看,我认为最好是明确某些年份的数据缺失,而且我刚刚意识到,如果在这两个年份之间存在缺失年份,那么图表就没有意义了。所以我想我会研究选项2和3。再次感谢!对于丢失的数据位,您需要第二个选项,即有几个线段。谢谢您,Lars。我花了5个小时才找到这个线程,并且读到不能通过键将行绑定到它们的数据。
var data = [{Year: 2007, Value: 8}, {Year: 2009, Value: 10}, {Year: 2010, Value: 11}]