利用html和JavaScript语言结合D3,写一个读取csv文件绘制成绩直方图的代码
时间: 2023-06-17 10:06:34 浏览: 107
以下是一个简单的例子,可以读取csv文件并使用D3绘制成绩直方图:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>成绩直方图</title>
<script src="https://d3js.org/d3.v5.min.js"></script>
</head>
<body>
<script>
// 读取csv文件
d3.csv("scores.csv").then(function(data) {
// 将成绩转化为数字
data.forEach(function(d) {
d.score = +d.score;
});
// 计算成绩区间
var bins = d3.histogram()
.value(function(d) { return d.score; })
.thresholds(d3.range(0, 101, 10))
(data);
// 设置画布大小和边距
var margin = {top: 10, right: 30, bottom: 30, left: 30},
width = 600 - margin.left - margin.right,
height = 400 - margin.top - margin.bottom;
// 创建SVG元素
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// 定义x轴比例尺
var x = d3.scaleLinear()
.domain([0, 100])
.range([0, width]);
// 定义y轴比例尺
var y = d3.scaleLinear()
.domain([0, d3.max(bins, function(d) { return d.length; })])
.range([height, 0]);
// 创建x轴
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
// 创建y轴
svg.append("g")
.call(d3.axisLeft(y));
// 绘制直方图
svg.selectAll("rect")
.data(bins)
.enter().append("rect")
.attr("x", function(d) { return x(d.x0); })
.attr("y", function(d) { return y(d.length); })
.attr("width", function(d) { return x(d.x1) - x(d.x0) - 1; })
.attr("height", function(d) { return height - y(d.length); })
.attr("fill", "steelblue");
}).catch(function(error) {
console.log(error);
});
</script>
</body>
</html>
```
这个例子中假设csv文件的格式如下:
```
name,score
Alice,85
Bob,70
Charlie,92
...
```
在本例中,我们使用D3的`d3.csv()`函数读取csv文件。然后,我们将成绩转换为数字,并使用D3的`d3.histogram()`函数计算成绩区间。接下来,我们定义了画布的大小和边距,并创建了SVG元素。我们使用D3的`d3.scaleLinear()`函数定义了x轴和y轴的比例尺,并使用`d3.axisBottom()`和`d3.axisLeft()`函数创建了x轴和y轴。最后,我们使用`selectAll()`、`data()`和`enter()`函数创建了一个矩形元素的选择集,并使用x轴和y轴的比例尺设置了矩形的位置和大小,最终绘制了成绩直方图。
阅读全文