javascript - 如何用线连接D3中的点?

标签 javascript d3.js svg charts svg-path

我提取了一些数据,并在缩放后绘制了一堆圆圈。这效果非常好。

var gSet = graph1.selectAll("g").data(data).enter().append("g");
gSet.append("circle")
  .attr({ cx: posX, cy: posY, r: dotSize })
  .attr("class", "dataPoint");

现在,我想把这些点联系起来。我见过的大多数例子都是关于条形,而不是线条,所以我用谷歌搜索了更多 line charts并决定使用路径元素,就像这样。

var gSet = graph1.selectAll("g").data(data).enter().append("g");
gSet.append("circle")
  .attr({ cx: posX, cy: posY, r: dotSize })
  .attr("class", "dataPoint");
gSet.append("path")
  .attr("d", d3.svg.line().x(posX).y(posY))
  .attr({ "stroke": "yellow", "stroke-width": "1" });

屏幕上没有出现任何新内容,并且由于无知,我不知道该在哪里戳一下看看出了什么问题。

  1. 我应该使用路径(还是线折线等更好的选择)?
  2. 我应该使用 d 属性还是有更合适的属性?
  3. 我应该应用d3.svg.line()函数还是有更平滑的方法?

最佳答案

我碰巧做了一些与我认为你想要的类似的事情,所以我将其按原样粘贴在 this jsfiddle 中,它将向您展示一种可能的连接线路的方法。这个图更像是一个父/子图,但这只是基于数据。您可以删除父属性并将每个节点链接到前一个节点。

回答您的问题:

  1. 你可以使用路径,但如果你只想要直线,那就有点矫枉过正了。如果你的情况很简单,那么我推荐 line。

  2. 如果使用路径对象,d 属性将描述路径的形状。使用 D3js,人们经常使用 d 作为匿名方法的两个可选参数之一(d 是数据,i 是递增计数器)。

  3. 您可以使用 d3.svg.line() 函数来描述线条的形状和位置,但如果您的数据像听起来一样简单,那么这可能有点过头了 - 考虑仅将线条对象附加为如下面我的代码所示。如果您需要“花哨的线条”,我的建议是选择一条路径,但这只是我的舒适区,可能还有其他方法。

对于我的方法,代码最终看起来像这样

var items = svg.selectAll("g").data(srcData).enter().append("g");
items.each(function(d, i){
    d3.select(this).attr("transform","translate("+d.posx+","+d.posy+")");

    if(d.parentid > 0)
        d3.select(this).append("line")
            .attr("x",0)
            .attr("y",0)
            .attr("x1",function(d){ return -1*(d.posx - parent(d.parentid).posx); })
            .attr("y1",function(d){ return -1*(d.posy - parent(d.parentid).posy); })
            .style("stroke",d.color)
            .style("stroke-width",2);

    d3.select(this).append("circle")
        .attr("r",5)
        .style("fill",d.color);
});

关于javascript - 如何用线连接D3中的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35067611/

相关文章:

javascript - 在 Internet Explorer 动态编写的样式表中添加 !important

javascript - JavaScript 代码中的安全性

javascript - 如何在 CSS 中创建具有渐变不透明度的边框?

android - 我收到消息 import SVG with ERROR@ <feGaussianBlur> is not supported

css - 从 css 更改 SVG 颜色

jquery - 如何在 Raphael 生成的 SVG 上制作工具提示

JavaScript打印运行代码

javascript - 使用 CSS 或 JavaScript 禁用 Safari 5's “overscroll” 行为

javascript - 关联数组并使用父级 d 作为 Selection.data() 的源数组

javascript - 使用D3,可以将语义缩放应用于径向树吗?