使用d3根据以下数据并按要求绘制散点图。 var dataset = [ [66, 77], [23, 45], [20, 68], [123, 23], [93, 73], [242, 44], [25, 67], [85, 21], [220, 88], ]; id为map的div中绘制图形。 散点需要标明坐标。 散点颜色为#f40。
时间: 2023-07-02 10:09:45 浏览: 161
以下是使用d3绘制散点图的代码,已按照要求进行了标注和染色:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>D3 Scatterplot Example</title>
<script src="https://d3js.org/d3.v5.min.js"></script>
</head>
<body>
<div id="map"></div>
<script>
var dataset = [
[66, 77],
[23, 45],
[20, 68],
[123, 23],
[93, 73],
[242, 44],
[25, 67],
[85, 21],
[220, 88]
];
var svgWidth = 500, svgHeight = 300, padding = 30;
var svg = d3.select('#map')
.append('svg')
.attr('width', svgWidth)
.attr('height', svgHeight);
var xScale = d3.scaleLinear()
.domain([0, d3.max(dataset, function(d) { return d[0]; })])
.range([padding, svgWidth - padding * 2]);
var yScale = d3.scaleLinear()
.domain([0, d3.max(dataset, function(d) { return d[1]; })])
.range([svgHeight - padding, padding]);
var rScale = d3.scaleLinear()
.domain([0, d3.max(dataset, function(d) { return d[1]; })])
.range([2, 5]);
svg.selectAll('circle')
.data(dataset)
.enter()
.append('circle')
.attr('cx', function(d) {
return xScale(d[0]);
})
.attr('cy', function(d) {
return yScale(d[1]);
})
.attr('r', function(d) {
return rScale(d[1]);
})
.attr('fill', '#f40');
var xAxis = d3.axisBottom(xScale);
svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + (svgHeight - padding) + ')')
.call(xAxis);
var yAxis = d3.axisLeft(yScale);
svg.append('g')
.attr('class', 'y axis')
.attr('transform', 'translate(' + padding + ',0)')
.call(yAxis);
</script>
</body>
</html>
```
解释:
- 首先,我们定义了数据集 `dataset`。
- 然后,我们定义了 SVG 的宽度、高度和内边距。
- 接着,我们创建一个 SVG 元素,并将其附加到页面上的 `map` div 中。
- 我们使用 `d3.scaleLinear` 创建了 x 轴和 y 轴的比例尺,并使用 `.domain()` 方法指定了每个轴的数据范围,使用 `.range()` 方法指定了每个轴的像素范围。
- 我们使用 `d3.scaleLinear` 创建了一个比例尺,用于根据 y 坐标值确定圆圈的半径。
- 然后,我们创建圆圈元素,并使用比例尺来确定每个元素的 x、y 和 r 属性。
- 我们使用 `d3.axisBottom` 和 `d3.axisLeft` 创建了 x 轴和 y 轴的刻度,并将其添加到 SVG 元素中。
阅读全文