Javascript 用图表显示csv文件中的数据

Javascript 用图表显示csv文件中的数据,javascript,csv,multidimensional-array,d3.js,Javascript,Csv,Multidimensional Array,D3.js,此页面需要显示从CSV文件读取数据的图形 我一直在关注一个关于这个问题的教程 我还尝试按照教程进行操作,以便将名称添加到图形中。这就是我迷路的地方,教程听起来很简单,但我就是不明白。每次我试图编辑代码时,它都会出错 如果您只想读取一个单列csv文件,它就可以完美地工作 但是,我想读取多列csv文件 此外,如果有什么可以让它更好,请让我知道 <html> <head> <script type="text/javascript" src="ht

此页面需要显示从CSV文件读取数据的图形

我一直在关注一个关于这个问题的教程

我还尝试按照教程进行操作,以便将名称添加到图形中。这就是我迷路的地方,教程听起来很简单,但我就是不明白。每次我试图编辑代码时,它都会出错

如果您只想读取一个单列csv文件,它就可以完美地工作

但是,我想读取多列csv文件

此外,如果有什么可以让它更好,请让我知道

    <html>
    <head>
    <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
    <script type="text/javascript">

     <html>
<head>
<meta http-equiv="Expires" content="-1">
<script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript">

function timedRefresh(timeoutPeriod) {
    setTimeout("location.reload(true);",timeoutPeriod);
    {
  d3.text("data2.csv", function(unparsedData)
  {
   var data = d3.csv.parseRows(unparsedData);

   //Create the SVG graph.
   var svg = d3.select("body").append("svg").attr("width", "100%").attr("height", "100%");


   var dataEnter = svg.selectAll("rect").data(data).enter();
   var graphHeight = 450;
   var barWidth = 20;
   var barSeparation = 10;
   var maxData = 105;
   var horizontalBarDistance = barWidth + barSeparation;
   var textYOffset = horizontalBarDistance / 2 - 12;
   var textXOffset = 20;
   var barHeightMultiplier = graphHeight / maxData;


   //Draw the bars.
   dataEnter.append("rect").attr("y", function(d, i)
   {
    return i * horizontalBarDistance;
   }).attr("x", function(d)
   {
    return 100;
   }).attr("height", function(d)
   {
    return barWidth;
   }).attr("width", function(d)
   {
    return d * barHeightMultiplier;
   });


   //Draw the text.
   dataEnter.append("text").text(function(d)
   {
    return d;
   }).attr("y", function(d, i)
   {
    return i * horizontalBarDistance + textXOffset;
   }).attr("x");
 });
 };
}
</script>
</head>
<body onLoad="JavaScript:timedRefresh(10000);"> 
</body>
</html>
==================================================================================

更新

==================================================================================

感谢您的帮助,这是我的更新代码

<html>
<head>
<meta http-equiv="Expires" content="-1">

<script type="text/javascript" src=".\JavaScripts\d3.v3.min.js"></script>
<script type="text/javascript">setTimeout(function(){window.location.href='index2.html'},120000);

    d3.csv("./data/data.csv", function(data){

   //Create the SVG graph.
    var svg = d3.select("#graph").append("svg").attr("width", "1800").attr("height", "600");

    var dataEnter = svg.selectAll("rect").data(data).enter();
    var graphWidth = 800;
    var barWidth = 40;
    var barSeparation = 30;
    var maxData = 2;
    var horizontalBarDistance = barWidth + barSeparation;
    var textYOffset = 25;
    var barXOffset = 260;
    var barYOffset = 5;
    var numXOffset = 230;
    var barHeightMultiplier = graphWidth / maxData;
    var fontSize = "30px";

    var color = d3.scale.category10();


   //Draw the bars.
    dataEnter.append("rect")
    .attr("fill",function(d,i){return color(i);})
    .attr("y", function(d, i){return i * horizontalBarDistance - barYOffset;})
    .attr("x", barXOffset)
    .attr("height", function(d){return barWidth;}) 
    .attr("width", function(d){return d.data * barHeightMultiplier;});


   //Draw the text.
    dataEnter.append("text")
    .text(function(d){return d.Name;})
    .attr("font-size", fontSize)
    .attr("font-family", "sans-serif")
    .attr("y", function(d, i){return i * horizontalBarDistance + textYOffset;})
    .attr("x");

   //Draw the numbers.
    dataEnter.append("text")
    .text(function(d){return d.data;})
    .attr("font-size", fontSize)
    .attr("font-family", "sans-serif")
    .attr("y", function(d, i){return i * horizontalBarDistance + textYOffset;})
    .attr("x", numXOffset);

     //Draw the Target bar
    dataEnter.append("rect")
    .attr("fill", "red")
    .attr("y", function(d, i){return i * horizontalBarDistance;})
    .attr("x", barXOffset + graphWidth)
    .attr("height", 70) 
    .attr("width", 10);

});

</script>

<style type="text/css">
#title {
    font-family:sans-serif;
    font-size: 50px;
    color:#000;
    text-decoration: underline;
    text-align: center;
    width: 100%;
    position:relative;
    margin-top:20;
}
#graph {
    overflow:hidden;
    margin-top:40;
}
</style>

</head>
<body>
<div id="title">Graph 1</div>
<div id="graph"></div>
</body>
</html>

setTimeout(函数(){window.location.href='index2.html'},120000);
d3.csv(“./data/data.csv”),函数(数据){
//创建SVG图形。
var svg=d3。选择(“图形”)。追加(“svg”).attr(“宽度”、“1800”).attr(“高度”、“600”);
var dataEnter=svg.selectAll(“rect”).data(data.enter();
var graphWidth=800;
var-barWidth=40;
var=30;
var maxData=2;
var horizontalBarDistance=棒宽+棒间距;
var textYOffset=25;
var barXOffset=260;
var barYOffset=5;
var numXOffset=230;
var barHeightMultiplier=graphWidth/maxData;
var fontSize=“30px”;
var color=d3.scale.category10();
//画栏杆。
dataEnter.append(“rect”)
.attr(“fill”,函数(d,i){返回颜色(i);})
.attr(“y”,函数(d,i){return i*horizontalBarDistance-barYOffset;})
.attr(“x”,barXOffset)
.attr(“高度”,函数(d){return barWidth;})
.attr(“宽度”,函数(d){返回d.data*barHeightMultiplier;});
//画课文。
dataEnter.append(“文本”)
.text(函数(d){返回d.Name;})
.attr(“字体大小”,字体大小)
.attr(“字体系列”、“无衬线”)
.attr(“y”,函数(d,i){return i*horizontalBarDistance+textYOffset;})
.attr(“x”);
//画出数字。
dataEnter.append(“文本”)
.text(函数(d){返回d.data;})
.attr(“字体大小”,字体大小)
.attr(“字体系列”、“无衬线”)
.attr(“y”,函数(d,i){return i*horizontalBarDistance+textYOffset;})
.attr(“x”,numXOffset);
//绘制目标条
dataEnter.append(“rect”)
.attr(“填充”、“红色”)
.attr(“y”,函数(d,i){返回i*水平距离;})
.attr(“x”,barXOffset+graphWidth)
.attr(“高度”,70)
.attr(“宽度”,10);
});
#头衔{
字体系列:无衬线;
字体大小:50px;
颜色:#000;
文字装饰:下划线;
文本对齐:居中;
宽度:100%;
位置:相对位置;
利润率最高:20;
}
#图表{
溢出:隐藏;
利润率最高:40;
}
图1

因为数据的第一行包含一个标题行,所以应该使用
d3.csv.parse
而不是
d3.csv.parseRows
。这篇文章解释了这些差异

解析的结果如下所示:

[
    {"names": "john", "data": 78},
    {"names": "brad", "data": 105},
    ...
]
因此,当您使用此数据创建
rect
元素时,会得到一个绑定到每个rect的对象。然后,当您使用
selection.attr
selection.style
时,传递的
d
值将成为绑定对象。这意味着您需要引用所需的属性,如
d.names
d.data
。文件中的每一列都是对象上的不同属性(如上所示)


另一个需要考虑的事情是:用<代码> d3.CS3.<代码>替换<代码> d3。文本< /代码>检索文件并在一个步骤中解析数据。

您所得到的错误是什么。你能链接到一些正在运行的代码吗?当我说它出错时,我的意思是,它就是不工作。我想这是因为我不知道如何分开这些列。我只需要更改代码,使数据引用
number
列。示例以文本格式显示所有数据。我需要把它放入一个数组中,以便图表使用。我明白了。我发布了一个答案,希望能有所帮助。好吧,我已经将
d3.text
更改为
d3.csv
d3.csv.parseRows
更改为
d3.csv.parse
,并将
data
更改为
d.data
。那为什么我会犯这个错误<代码>未捕获类型错误:对象[对象数组]没有方法“charCodeAt”。。。。。。。只是猜测一下,是不是因为我使用的是d3.v3.mim.js而不是d3.v3.js??您应该阅读我引用的文档链接。如果使用d3.csv,则不需要同时调用parseRows,因为解析是自动进行的。回调将传递一个对象数组,您可以直接使用该数组创建rect。我正在尝试解析已经解析的数据。。。现在工作很有魅力谢谢。你可能知道的快速问题。。。我需要改变每个酒吧的颜色。最好的方法是什么。d3有分类色阶,内置调色板,称为category10、category20等等。或者,您可以使用范围内的颜色代码定义自己的顺序比例。
[
    {"names": "john", "data": 78},
    {"names": "brad", "data": 105},
    ...
]