按照Bostock的示例,该行是使用CSV文件中的数据创建的。所以,数据实际上是使用d3.csv()
函数加载的。这些都是相当标准的步骤。获取与D3.js中的某一行相关的数据
我在挣扎的是获取x/y轴数据集,而不再从数据文件加载到全局变量。我尝试将data()
方法应用于线路,但没有成功,控制台简单地说Array [undefined]
。
有什么选择/方法可以实现这个目标?您的建议将受到高度赞赏。
按照Bostock的示例,该行是使用CSV文件中的数据创建的。所以,数据实际上是使用d3.csv()
函数加载的。这些都是相当标准的步骤。获取与D3.js中的某一行相关的数据
我在挣扎的是获取x/y轴数据集,而不再从数据文件加载到全局变量。我尝试将data()
方法应用于线路,但没有成功,控制台简单地说Array [undefined]
。
有什么选择/方法可以实现这个目标?您的建议将受到高度赞赏。
与该行关联的数据不是undefined
。我猜你使用了d3.select("path")
来选择这条线,因为轴是在SVG之前绘制的(当然,轴没有data
),所以会选择该轴。
所以,选择的线路,只需设置它的类或ID:
g.append("path")
.datum(data)
.attr("id", "myLine")
并使用data()
是获取:
console.log(d3.select("#myLine").data())
这里是bl.ocks,检查控制台,数据在那里:https://bl.ocks.org/anonymous/e79769c5080a4618b00b946f722d7e39
请记住,如果您试图获取与d3.tsv
函数以外的行关联的数据,则必须使用等待,直到该行被绘制在SVG中,因此存在于DOM中。这是使用setTimeout
一个例子,与外部d3.tsv
的执行console.log:
setTimeout(()=>{console.log(d3.select("#myLine").data());}, 1000);
和各自bl.ocks:https://bl.ocks.org/anonymous/68ec8087514ff3335d81704796a9a944
非常感谢您的解释。 'setTimeout()'函数确实有效。更有趣的是,无论毫秒参数是“0.00005”,还是“1”或“1000”,它都可以工作。这让我想知道是否有一种方法可以确定“该行是在SVG中绘制的,因此存在于DOM中”。 – Xavier
是的,三个是:在回调结束时放置一个'console.timeEnd'。 –
你可以包括你的代码 – Craicerjack
相同的代码,博斯托克的例子(https://开头BL .ocks.org/mbostock/3883245),但文件不在CSV文件中。 – Xavier
如果你只是使用该块的代码,并简单地将方法更改为csv,那么我没有看到它的问题,除非你没有改变数据为CSV(逗号分隔与制表符分隔) – Craicerjack