D3.js 绘制D3矩形

D3.js 绘制D3矩形,d3.js,D3.js,我是D3和JS的初学者。 我试图用一个小的csv文件做一个简单的矩形可视化 price, units 80.67, 100 80.87, 99 79.34, 47 文件、csv位于同一文件夹中。 我正在使用Python的SimpleHTTPServer在此文件夹中本地提供服务 这是我的代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <tit

我是D3和JS的初学者。 我试图用一个小的csv文件做一个简单的矩形可视化

price, units
80.67, 100
80.87, 99
79.34, 47
文件、csv位于同一文件夹中。 我正在使用Python的SimpleHTTPServer在此文件夹中本地提供服务

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Data</title>
    <script type="text/javascript" src="../d3/d3.v3.js"></script>
</head>
<body>
    <script type="text/javascript">

        // load csv from the same directory
        d3.csv("test.csv", function (data){

            return {
                        price: +data.price, // convert to number with +
                        units: +data.units, // convert to number with +         
            };

            var canvas = d3.select("body").append("svg")
                .attr("width", 500)
                .attr("height", 500)

            canvas.selectAll("rect")
                .data(data)
                .enter()
                    .append("rect")
                    .attr("width", function (d) { return d.price; })
                    .attr("height", 48)
                    .attr("y", function (d) { return d.units; })
                    .attr("fill", "blue");

            canvas.selectAll("text")
                .data(data)
                .enter()
                    .append("text")
                    .attr("fill", "white")
                    .attr("y", function (d) { return d.units + 24; })
                    .text( function (d) { return d.units;})


            });



    </script>
</body>

测试数据
//从同一目录加载csv
d3.csv(“test.csv”),函数(数据){
返回{
价格:+data.price,//转换为数字+
单位:+data.units,//用+
};
var canvas=d3.select(“body”).append(“svg”)
.attr(“宽度”,500)
.attr(“高度”,500)
canvas.selectAll(“rect”)
.数据(数据)
.输入()
.append(“rect”)
.attr(“宽度”,函数(d){返回d.price;})
.attr(“高度”,48)
.attr(“y”,函数(d){返回d.units;})
.attr(“填充”、“蓝色”);
canvas.selectAll(“文本”)
.数据(数据)
.输入()
.append(“文本”)
.attr(“填充”、“白色”)
.attr(“y”,函数(d){返回d.units+24;})
.text(函数(d){返回d.units;})
});

我没有收到任何错误,只是一张空白页。
这段代码有什么问题?

在回调中要做的第一件事就是返回。之后的任何代码都不会被执行。我指的是

return {
                    price: +data.price, // convert to number with +
                    units: +data.units, // convert to number with +         
        };
应该是这样的

data.forEach(function(d) {
  d.price = +d.price;
  d.units = +d.units;
});

回调的签名也应该是
function(error,data)
而不是
function(data)

我用您的data.forEach和添加的function(error,data)替换了我的报税表。现在我得到一个错误“error:Invalid value for attribute y=“NaN”,html只显示一个矩形而不是三个。哦,是的,谢谢!!检查csv后,我发现逗号和值之间有一个空格:比如:80.67100。删除空间后,我有:80.67100,它现在可以工作了。但我仍然不明白为什么这个空格会导致错误事实上,我想我明白了:这个空格只在csv文件的头一行起作用。应该是价格,单位。如果我像这样放置一个空格:price,units,那么只会显示一个矩形。逗号和值之间有很多空格似乎没有什么影响。可能是因为我正在将字符串转换为值。