【D3.js数据可视化系列教程】--(十一)散点图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhang__tianxu/article/details/11375203

1. 一般的散点绘制

散点图的绘制思路:

  • 准备输入数据,用二维数组表示每个点的坐标
  • 绘制SVG,并绑定数据
  • 绘制圆元素,并用绑定的数据设置圆的属性

以下就是这个思路的实现,下面我们会介绍下调整的办法。


    
    
  1. //高宽
  2. var w = 500;
  3. var h = 100;
  4. var dataset = [
  5. [ 5, 20], [ 480, 90], [ 250, 50], [ 100, 33], [ 330, 95],
  6. [ 410, 12], [ 475, 44], [ 25, 67], [ 85, 21], [ 220, 88]
  7. ];
  8. //创建SVG
  9. var svg = d3.select( "body")
  10. .append( "svg")
  11. .attr( "width", w)
  12. .attr( "height", h);
  13. svg.selectAll( "circle")
  14. .data(dataset)
  15. .enter()
  16. .append( "circle")
  17. .attr( "cx", function(d) {
  18. return d[ 0];
  19. })
  20. .attr( "cy", function(d) {
  21. return d[ 1];
  22. })
  23. .attr( "r", 5);

  2. 点的大小

控制半径,我们可以根据Y坐标的数据来绘制上面大下面小的圆。


    
    
  1. .attr( "r", function(d) {
  2. return Math.sqrt(h - d[ 1]);
  3. });

  3. 点的文本

注意文本的位置与圆中心的位置


    
    
  1. svg.selectAll( "text")
  2. .data(dataset)
  3. .enter()
  4. .append( "text")
  5. .text( function(d) {
  6. return d[ 0] + "," + d[ 1];
  7. })
  8. .attr( "x", function(d) {
  9. return d[ 0];
  10. })
  11. .attr( "y", function(d) {
  12. return d[ 1];
  13. })
  14. .attr( "font-family", "sans-serif")
  15. .attr( "font-size", "11px")
  16. .attr( "fill", "red");

  4. 源码


    
    
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>testD3-9-drawScatterPlot.html </title>
  6. <script type="text/javascript" src="d3.js"> </script>
  7. <style type="text/css">
  8. </style>
  9. </head>
  10. <body>
  11. <script type="text/javascript">
  12. //高宽
  13. var w = 500 ;
  14. var h = 100 ;
  15. var dataset = [
  16. [ 5 , 20 ], [ 480 , 90 ], [ 250 , 50 ], [ 100 , 33 ], [ 330 , 95 ],
  17. [ 410 , 12 ], [ 475 , 44 ], [ 25 , 67 ], [ 85 , 21 ], [ 220 , 88 ]
  18. ];
  19. //创建SVG
  20. var svg = d3.select( "body" )
  21. .append( "svg" )
  22. .attr( "width" , w)
  23. .attr( "height" , h);
  24. svg.selectAll( "circle" )
  25. .data(dataset)
  26. .enter()
  27. .append( "circle" )
  28. .attr( "cx" , function(d) {
  29. return d[ 0 ];
  30. })
  31. .attr( "cy" , function(d) {
  32. return d[ 1 ];
  33. })
  34. .attr( "r" , function(d) {
  35. return Math .sqrt(h - d[ 1 ]);
  36. });
  37. svg.selectAll( "text" )
  38. .data(dataset)
  39. .enter()
  40. .append( "text" )
  41. .text( function(d) {
  42. return d[ 0 ] + "," + d[ 1 ];
  43. })
  44. .attr( "x" , function(d) {
  45. return d[ 0 ];
  46. })
  47. .attr( "y" , function(d) {
  48. return d[ 1 ];
  49. })
  50. .attr( "font-family" , "sans-serif" )
  51. .attr( "font-size" , "11px" )
  52. .attr( "fill" , "red" );
  53. </script>
  54. </body>
  55. </html>

  5. 效果

散点图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值