D3---绘制散点图

一:实现效果

如以上视图显示,分别实现散点图和三个按钮的功能。

二:思路

1.添加画布(画图形一般首要的就是添加画布)。

2.添加合适的比例尺。

3.添加圆。

4.添加坐标轴。

5.添加三个按钮并实现相应的功能。

三:代码分析

1.添加画布。

<script>
            var wwidth=400;
			var hheight=400;
			var svg=d3.select("body").append("svg")
						.attr("width",wwidth)
						.attr("height",hheight);
</script>

2.添加合适的比例尺。

<script>
            
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用d3读取csv数据并绘制交互散点图,可以按照以下步骤进行操作: 1. 在HTML中添加一个SVG元素,用于绘制散点图: ``` <div id="scatterplot"></div> <script> var svg = d3.select("#scatterplot") .append("svg") .attr("width", width) .attr("height", height); </script> ``` 2. 使用d3.csv()方法读取csv数据: ``` d3.csv("data.csv", function(data) { // 处理读取到的数据 }); ``` 3. 对读取到的数据进行处理,把需要绘制的数据提取出来: ``` d3.csv("data.csv", function(data) { var scatterData = data.map(function(d) { return { x: +d.x, // 把字符串类型转为数字类型 y: +d.y, label: d.label }; }); }); ``` 4. 根据数据绘制散点图: ``` d3.csv("data.csv", function(data) { var scatterData = data.map(function(d) { return { x: +d.x, y: +d.y, label: d.label }; }); svg.selectAll(".dot") .data(scatterData) .enter().append("circle") .attr("class", "dot") .attr("cx", function(d) { return xScale(d.x); }) .attr("cy", function(d) { return yScale(d.y); }) .attr("r", 5) .style("fill", function(d) { return colorScale(d.label); }); }); ``` 其中,xScale和yScale是d3.scaleLinear()生成的线性比例尺,用于把数据映射到画布上的坐标系;colorScale是d3.scaleOrdinal()生成的序数比例尺,用于把标签映射到颜色上。 5. 添加交互功能,比如鼠标悬停时显示数据标签: ``` svg.selectAll(".dot") .on("mouseover", function(d) { tooltip.text(d.label) .style("visibility", "visible"); }) .on("mousemove", function(d) { tooltip.style("top", (d3.event.pageY - 10) + "px") .style("left", (d3.event.pageX + 10) + "px"); }) .on("mouseout", function(d) { tooltip.style("visibility", "hidden"); }); var tooltip = d3.select("#scatterplot") .append("div") .attr("class", "tooltip") .style("visibility", "hidden"); ``` 可以根据需要添加其他交互功能,比如鼠标点击跳转到其他页面等。 完整的代码示例: ``` <!DOCTYPE html> <html> <head> <title>Interactive Scatterplot</title> <meta charset="utf-8"> <style> .dot { stroke: #fff; stroke-width: 1.5px; } .tooltip { position: absolute; background-color: #fff; border: 1px solid #000; padding: 5px; font-size: 12px; } </style> </head> <body> <div id="scatterplot"></div> <script src="https://d3js.org/d3.v5.min.js"></script> <script> var margin = {top: 20, right: 20, bottom: 30, left: 40}, width = 960 - margin.left - margin.right, height = 500 - margin.top - margin.bottom; var xScale = d3.scaleLinear() .range([0, width]); var yScale = d3.scaleLinear() .range([height, 0]); var colorScale = d3.scaleOrdinal(d3.schemeCategory10); var svg = d3.select("#scatterplot") .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 + ")"); d3.csv("data.csv", function(data) { var scatterData = data.map(function(d) { return { x: +d.x, y: +d.y, label: d.label }; }); xScale.domain(d3.extent(scatterData, function(d) { return d.x; })).nice(); yScale.domain(d3.extent(scatterData, function(d) { return d.y; })).nice(); svg.selectAll(".dot") .data(scatterData) .enter().append("circle") .attr("class", "dot") .attr("cx", function(d) { return xScale(d.x); }) .attr("cy", function(d) { return yScale(d.y); }) .attr("r", 5) .style("fill", function(d) { return colorScale(d.label); }) .on("mouseover", function(d) { tooltip.text(d.label) .style("visibility", "visible"); }) .on("mousemove", function(d) { tooltip.style("top", (d3.event.pageY - 10) + "px") .style("left", (d3.event.pageX + 10) + "px"); }) .on("mouseout", function(d) { tooltip.style("visibility", "hidden"); }); }); var tooltip = d3.select("#scatterplot") .append("div") .attr("class", "tooltip") .style("visibility", "hidden"); </script> </body> </html> ``` 其中,data.csv是示例数据文件,格式如下: ``` x,y,label 1,2,A 3,4,B 5,6,A 7,8,B 9,10,A ``` 可以根据需要修改数据文件的格式和内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值