【问题标题】:How to add different shape marker in d3?如何在d3中添加不同的形状标记?
【发布时间】:2017-07-15 13:19:02
【问题描述】:

我尝试在 D3 svg 中添加不同形状大小的标记(例如,三角形、矩形、圆形), 例如,如果级别为管理员,则标记形状为圆形 如果 level 是 member ,则标记形状是三角形 如果 level 是 guest ,则标记形状是矩形 我尝试使用 gooup.each

var groups = svg
  .style("overflow", "visible")
  .selectAll("g")
  .data(data)
  .enter()
  .append("g")
  .attr("transform", function(d) {return "translate(" +  projection([d.lon,d.lat])+ ")";});

groups.each(function(d) {
var elem = d3.select(this);

  if (d.level == "admin") {

    elem.append("rect").attr("width", 5).attr("height", 5)
    .style("fill",function() {
    return "red";
    });
  }
 if (d.level == "member") {
 elem.append("path").attr("d", 'M 100 100 L 300 100 L 200 300 z').attr('transform','scale(0.04) translate(-150,-130)')
  .style("fill",function() {
    return "green";
    });
  }
 if (d.level == "guest") {
elem.append("circle").attr("r", 4).attr('cy',2).attr('cx',2)        
.style("fill",function() {return "yellow";});
  }
});

但它不能显示数据数组中的第一个数据,

来自my code,如您所见,它无法显示数据数组中的第一个数据,但我不知道如何修改。我真的很感谢你的帮助!

【问题讨论】:

标签: d3.js svg


【解决方案1】:

您可以将组 g - 元素附加到 svg ,遍历该组并向其附加不同的形状

看看sn-p down

 <div id='graphContent'></div>
  
  <script src='https://d3js.org/d3.v4.min.js'></script>

    <script>
    var selector = "#graphContent";

var data = [{ level: "admin" }, { level: "admin" },{ level: "member" }, { level: "guest" },{ level: "admin" }];

var groups = d3
  .select("#graphContent")
  .append("svg")
  .style("overflow", "visible")
  .selectAll("g")
  .data(data)
  .enter()
  .append("g")
  .attr("transform", (d, i) => `translate(0,${i * 20})`);

groups.each(function(d) {
  var elem = d3.select(this);

  if (d.level == "admin") {
    //rectangle
    elem.append("rect").attr("width", 5).attr("height", 5);
  }
  if (d.level == "member") {
    //triangle
    //svg does not have triangle shape , so we use path to draw it
     elem.append("path").attr("d", 'M 100 100 L 300 100 L 200 300 z').attr('transform','scale(0.04) translate(-150,-130)')
  }
  if (d.level == "guest") {
    //circle
    elem.append("circle").attr("r", 4).attr('cy',2).attr('cx',2);
  }
});
  </script>

【讨论】:

  • 我已经按照你说的修改了我的代码,但仍然无法工作。你可以从jsfiddle.net/mattcrawfoord/Lzya029a 看到我的代码。但我不确定如何修改。非常感谢您的帮助!
  • 这里更新了小提琴jsfiddle.net/Lzya029a/1你第二次附加svg,我也建议为不同的级别设置不同的颜色
  • 另外,我还有css,请看一下
  • @bumbeishivli,非常感谢您的帮助!但是我发现你的代码有一个问题,它不能显示数据数组中的第一个数据,例如第一个数据是成员,但它不能从 jsfiddle.net/mattcrawfood/Lzya029a/2 显示
  • 你确定吗?显示所有 3 个成员三角形 - jsfiddle.net/6n472rk9 请看,我已经更改了 css 并为组添加了类
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 2013-12-05
  • 2021-12-07
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2022-12-10
相关资源
最近更新 更多