在D3中使用.tsv数据

时间:2014-08-27 16:47:45

标签: javascript d3.js

我试图在D3中使用.tsv人口统计数据创建交互式人口金字塔,虽然我有足够的D3知识来创建它们,但我不知道如何加载数据。在学习如何使用D3的同时,我一直在使用JSON数据(在Mike Dewar的精彩书籍的帮助下),但直到现在我才使用TSV或CSV数据。

你能帮助我,所以我可以开始这个项目吗?我知道我必须使用d3.tsv(“文件”,函数),但有些事情仍然让我感到烦恼。例如,如果我想为列中的每一位数据创建div或SVG矩形,我如何告诉程序从数据中获取“i”?

这是数据的一个例子:

AGE A08    M08    F08    A09    M09    F09
0   40.8   20.9   19.9   40.9   20.9   19.9
1   40.7   20.8   19.9   40.8   20.9   19.9
2   40.6   20.8   19.8   40.7   20.9   19.9
3   40.5   20.7   19.7   40.6   20.8   19.8

这甚至是.tsv吗?据我所知,tsv表示制表符分隔值,而这些值用空格分隔。如果这不是.tsv文件,我该如何使用它?

1 个答案:

答案 0 :(得分:0)

是的,d3.tsv()是您的朋友,如果您正在解析 true TSV。通过true,我的意思是它就像一个CSV,但是使用标签而不是逗号。您作为示例包含的格式化表可能有时会有两个连续的选项卡,只是为了实现正确的列间距,并且不会构成TSV。我猜你的TSV文件很好。

关于为每个值获取i的问题:通常,CSV / TSV数据以二维表格形式呈现,在这种情况下,您不必处理{{1还有i。即表以行和列的形式构成,而不仅仅是一个平面的值列表。在d3中,有一种模式可以处理这样的事情。例如,请查看this examplethis tutorial(向下滚动到名为绑定二维数据的部分)。

如果您要为每个值创建一个SVG矩形,您可能仍然希望遵循二维表格模式,而不是展平数据。在这种情况下,您可以为每一行创建一个SVG组,并在每个组中嵌套与每行的值对应的矩形。

当然还有其他方式来表示这些数据,例如,作为堆积条形图。在这种情况下,请查看d3.layout.stack。在这种情况下,您也不需要压扁数据。

如果你真的想出了一个案例,你需要将数据展平为一个值数组,你可以在普通的javascript中使用一个循环,以一种你需要的方式收集值。但我怀疑你是否需要走这条路。