javascript - 如何正确解析 CSV 文件以使用 SVG 元素
问题描述
我第一次使用 Javascript 和 d3.js,作为一个不错的入门项目,我想制作一个条形图。一切正常,但我使用的数组是在 .js 文件中声明的,而不是实际上是从单独的文件中导入的。我正在尝试改进我的代码,以便它从 CSV 文件中提取数据,而不是仅仅在实际的 .js 文件中声明一个数组,但是 CSV 方法将每一行转换为一个对象,从而使我的代码无法处理数据我不知道如何解决它。有没有办法从 CSV 中提取数组,或者我最好更改所有内容以便更好地使用 d3.csv() 方法?
到目前为止,我的尝试只是将整个 .js 函数包装在 d3.csv(/Data/data.csv, function(dataset){...} 中,我还确保所有数字值都转换为数字带有一个 forEach 循环。
d3.csv("Data/data.csv", function(dataset){
dataset.forEach(function(d){
d.year = +d.year;
d.reported = +d.reported;
d.crude = +d.crude;
d.ageAdj = +d.ageAdj;
});
...some example code that I believe is affected by the error...
svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x",(d)=>(xScale(d[0])))
.attr("y",(d)=>(yScale(d[2])))
.attr("width",((w-2*pad)/dataset.length)-3)
.attr("height",(d)=>(h-yScale(d[2])-pad))
.attr("fill", function(d){
return colorScale(d[2])
})
.attr("class","bar");
...other code used for formatting graph...
});
当我运行它时,我得到的错误涉及解析 x、y 和 height 属性。使用 console.log(dataset) 打印出正确的值,全部存储为对象。
解决方案
您的数据集是一组对象,CSV 的标题设置键。但是,对于 x,y,height,color 属性将数据集视为数组数组:d 是数据集中的一个项目,如果它是一个对象,那么您可能应该使用 d.year/d.crude/ ... 而不是 d[0]/d[1]/... – Andrew Reid
我只需要使用点符号来访问对象,而不是如何访问二维数组。
推荐阅读
- ios - 将导航栏半透明设置为 false 不会让搜索栏出现
- excel - 到达现有数据的末尾并添加多个列标题
- c++ - 选择排序算法无法正确排序数字
- reactjs - 如何将 react-select 组件的高度设置为 100%?
- ruby-on-rails - 带导轨的 Vue。如何在 VUE 代码中使用模型
- javascript - Ant Design Form.getFieldsError 总是返回空错误
- c# - Unity WaitForSeconds 功能无法正常工作
- pine-script - 将价格保存在数组中以便稍后检索
- pyspark - spark struct streaming writeStream 输出无数据但无错误
- node.js - 为什么我不能在从快速路由调用的异步函数中使用 for 循环进行迭代?