当前位置:   article > 正文

【D3.js数据可视化系列教程】(三十一)-- 力导向图之分子式_d3两个圆连线

d3两个圆连线

其实就是简单的力导向图

只是加载了json文件

设置了分层的颜色

设置化学键分隔线

//(1)平方根比例尺

  1. var radius = d3.scale.sqrt()
  2. .range([0, 6]);//值域

(2)连线是两个圆半径之和+20那么长

  1. .linkDistance(function(d) {//(2)连线是两个圆半径之和+20那么长
  2. return radius(d.source.size) //数据源里的size就是半径
  3. + radius(d.target.size) + 20;
  4. });

(3)只要连线大于2就加一条分隔线

  1. //怎么添加多条分隔线呢?
  2. link.filter(function(d) {//基于数据过滤的选择。
  3. return d.bond > 1;
  4. }).append("line")
  5. .attr("class", "separator");//添加一条分隔线

(4)根据圆圈的种类的大小设置大小

  1. node.append("circle")
  2. .attr("r", function(d) {
  3. return radius(d.size); //(4)根据圆圈的种类的大小设置大小
  4. })
  5. .style("fill", function(d) {
  6. return color(d.atom); //根据圆圈的种类设置颜色
  7. });

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>testD3-29-Molecule.html</title>
  6. <script type="text/javascript" src="http://localhost:8080/spring/js/d3.v3.js"></script>
  7. <style type="text/css">
  8. .link line {
  9. stroke: #696969;
  10. }
  11. /* 分隔线的格式 透明的 */
  12. .link line.separator {
  13. stroke: #fff;
  14. stroke-width: 2px;
  15. }
  16. .node circle {
  17. stroke: #000;
  18. stroke-width: 1.5px;
  19. }
  20. .node text {
  21. font: 10px sans-serif;
  22. pointer-events: none;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <script type="text/javascript">
  28. var width = 960,
  29. height = 500;
  30. var color = d3.scale.category20();
  31. //(1)平方根比例尺
  32. var radius = d3.scale.sqrt()
  33. .range([0, 6]);//值域
  34. var svg = d3.select("body").append("svg")
  35. .attr("width", width)
  36. .attr("height", height);
  37. var force = d3.layout.force()
  38. .size([width, height])
  39. .charge(-400)
  40. .linkDistance(function(d) {//(2)连线是两个圆半径之和+20那么长
  41. return radius(d.source.size) //数据源里的size就是半径
  42. + radius(d.target.size) + 20;
  43. });
  44. d3.json("http://localhost:8080/spring/D3data/graph.json", function(graph) {
  45. force
  46. .nodes(graph.nodes)
  47. .links(graph.links)
  48. .on("tick", tick)
  49. .start();
  50. var link = svg.selectAll(".link")
  51. .data(graph.links)
  52. .enter().append("g")
  53. .attr("class", "link");
  54. link.append("line")
  55. .style("stroke-width", function(d) { return (d.bond * 2 - 1) * 2 + "px"; });
  56. //(3)只要连线大于2就加一条分隔线
  57. //怎么添加多条分隔线呢?
  58. link.filter(function(d) {//基于数据过滤的选择。
  59. return d.bond > 1;
  60. }).append("line")
  61. .attr("class", "separator");//添加一条分隔线
  62. //常规的添加节点
  63. var node = svg.selectAll(".node")
  64. .data(graph.nodes)
  65. .enter().append("g")
  66. .attr("class", "node")
  67. .call(force.drag);
  68. //常规的添加圆点
  69. node.append("circle")
  70. .attr("r", function(d) {
  71. return radius(d.size); //(4)根据圆圈的种类的大小设置大小
  72. })
  73. .style("fill", function(d) {
  74. return color(d.atom); //根据圆圈的种类设置颜色
  75. });
  76. node.append("text")
  77. .attr("dy", ".35em")
  78. .attr("text-anchor", "middle")//在圆圈中加上数据
  79. .text(function(d) { return d.atom; });
  80. //常规的打点
  81. function tick() {
  82. link.selectAll("line")
  83. .attr("x1", function(d) { return d.source.x; })
  84. .attr("y1", function(d) { return d.source.y; })
  85. .attr("x2", function(d) { return d.target.x; })
  86. .attr("y2", function(d) { return d.target.y; });
  87. node.attr("transform", function(d) {
  88. return "translate(" + d.x + "," + d.y + ")";
  89. });
  90. }
  91. });
  92. </script>
  93. </body>
  94. </html>


 {
  "nodes": [
    {"atom": "C", "size": 12},
    {"atom": "C", "size": 12},
    {"atom": "C", "size": 12},
    {"atom": "N", "size": 14},
    {"atom": "H", "size": 1},
    {"atom": "O", "size": 16},
    {"atom": "O", "size": 16},
    {"atom": "H", "size": 1},
    {"atom": "H", "size": 1},
    {"atom": "H", "size": 1},
    {"atom": "H", "size": 1},
    {"atom": "H", "size": 1},
    {"atom": "H", "size": 1}
  ],
  "links": [
    {"source": 0, "target": 1,  "bond": 1},
    {"source": 1, "target": 2,  "bond": 1},
    {"source": 1, "target": 3,  "bond": 1},
    {"source": 2, "target": 5,  "bond": 4},
    {"source": 2, "target": 6,  "bond": 1},
    {"source": 1, "target": 4,  "bond": 1},
    {"source": 3, "target": 10, "bond": 1},
    {"source": 3, "target": 11, "bond": 1},
    {"source": 0, "target": 7,  "bond": 1},
    {"source": 0, "target": 8,  "bond": 1},
    {"source": 0, "target": 9,  "bond": 1},
    {"source": 5, "target": 12, "bond": 1}
  ]
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/132754
推荐阅读
相关标签
  

闽ICP备14008679号