我试图在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文件,我该如何使用它?
答案 0 :(得分:0)
是的,d3.tsv()
是您的朋友,如果您正在解析 true TSV。通过true,我的意思是它就像一个CSV,但是使用标签而不是逗号。您作为示例包含的格式化表可能有时会有两个连续的选项卡,只是为了实现正确的列间距,并且不会构成TSV。我猜你的TSV文件很好。
关于为每个值获取i
的问题:通常,CSV / TSV数据以二维表格形式呈现,在这种情况下,您不必处理{{1还有i
。即表以行和列的形式构成,而不仅仅是一个平面的值列表。在d3中,有一种模式可以处理这样的事情。例如,请查看this example或this tutorial(向下滚动到名为绑定二维数据的部分)。
如果您要为每个值创建一个SVG矩形,您可能仍然希望遵循二维表格模式,而不是展平数据。在这种情况下,您可以为每一行创建一个SVG组,并在每个组中嵌套与每行的值对应的矩形。
当然还有其他方式来表示这些数据,例如,作为堆积条形图。在这种情况下,请查看d3.layout.stack
。在这种情况下,您也不需要压扁数据。
如果你真的想出了一个案例,你需要将数据展平为一个值数组,你可以在普通的javascript中使用一个循环,以一种你需要的方式收集值。但我怀疑你是否需要走这条路。