在d3中访问SVG路径长度

用户名

我整理了一个多折线图,它具有一个过渡集,因此线条被“绘制”并且标签一个接一个地贴上。它可以工作,但是我看不到如何单独访问每行的长度。我拥有的代码仅通过传回第一个路径的长度.node()结果是,所有路径都被赋予了第一条路径的长度,这为其他路径提供了错误的起点。代码如下。任何帮助深表感谢。

var margin = {top: 20, right: 80, bottom: 30, left: 60},
    width = 600 - margin.left - margin.right,
    height = 400 - margin.top - margin.bottom;

var x = d3.scale.ordinal()
    .rangePoints([0, width], 1);

var y = d3.scale.linear()
    .range([height, 0]);

var color = d3.scale.category20();

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom");

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left");

var line = d3.svg.line()
    .interpolate("linear")
    .x(function(d) { return x(d.month); })
    .y(function(d) { return y(d.rainfall); });

var svg = d3.select("body").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(error, data) {
    color.domain(d3.keys(data[0]).filter(function(key) { return key !== "Month"; }));

var countries = color.domain().map(function(country) {
    return {
        country: country,
        values: data.map(function(d) {
            return {month: d.Month, rainfall: +d[country]};
        })
    };
});

x.domain(data.map(function(d) { return d.Month; }));
y.domain([
    d3.min(countries, function(c) { return d3.min(c.values, function(v) { return v.rainfall - 7; }); }),
    d3.max(countries, function(c) { return d3.max(c.values, function(v) { return v.rainfall + 7; }); })
]);

svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis);

svg.append("g")
    .attr("class", "y axis")
    .call(yAxis)
  .append("text")
    .attr("transform", "rotate(-90)")
    .attr("y", "1.1em")
    .style("text-anchor", "end")
    .text("Rainfall (mm)");

var country = svg.selectAll(".country")
.data(countries)
  .enter().append("g")
    .attr("class", "country");

var path = country.append("path")
    .attr("id", function(d, i) { return "line" + i; })
    .attr("class", "line")
    .attr("d", function(d) { return line(d.values); })
    .style("stroke", function(d) { return color(d.country); })

var totalLength = path.node().getTotalLength();

path.attr("stroke-dasharray", totalLength + " " + totalLength)
    .attr("stroke-dashoffset", totalLength)
  .transition()
    .delay(function(d, i) { return i * 1000; })
    .duration(1000)
    .ease("linear")
    .attr("stroke-dashoffset", 0)
    .each("end", function() {
        labels.transition()
            .delay(function(d, i) { return i * 1000; })
            .style("opacity", 1);
        });

var labels = country.append("text")
    .datum(function(d) { return {country: d.country, value: d.values[d.values.length - 1]}; })
    .attr("class", "label")
    .attr("transform", function(d) { return "translate(" + x(d.value.month) + "," + y(d.value.rainfall) + ")"; })
    .attr("x", 3)
    .attr("dy", ".35em")
    .style("opacity", 0)
    .text(function(d) { return d.country; });

});

拉尔斯·科特霍夫(Lars Kotthoff)

您可以将路径的总长度作为另一个属性添加到数据中,然后使用:

path.each(function(d) { d.totalLength = this.getTotalLength(); })
    .attr("stroke-dasharray", function(d) { return d.totalLength + " " + d.totalLength; })
    .attr("stroke-dashoffset", function(d) { return d.totalLength; })
// etc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

d3可拖动svg路径线段

来自分类Dev

在工具提示中显示D3 SVG

来自分类Dev

在d3中获取所选svg元素的类

来自分类Dev

在D3中选择并移动导入的SVG文件

来自分类Dev

如何获得SVG路径形状以缩放D3?

来自分类Dev

d3从数组创建SVG路径

来自分类Dev

在D3中,如何仅对特定路径启用缩放?

来自分类Dev

替代或防止D3中的路径重叠

来自分类Dev

d3 SVG中的Angular指令

来自分类Dev

d3中的并排路径

来自分类Dev

SVG中的路径位于D3图表中圆圈的前面,尽管有附加顺序

来自分类Dev

d3从JSON路径创建svg

来自分类Dev

当应用蒙版时,由d3(d3.svg.arc)创建的SVG路径元素消失

来自分类Dev

D3中的GeoJSON:路径未绑定到数据

来自分类Dev

d3 JavaScript,获取svg路径中两点之间的距离

来自分类Dev

如何在SVG中为D3画笔创建路径

来自分类Dev

将多条路径合并到一个D3(SVG)中

来自分类Dev

检查路径是否在带有d3的svg中具有标题

来自分类Dev

在D3中访问JSON值

来自分类Dev

如何在d3和SVG中创建阴影路径?

来自分类Dev

d3从数组创建SVG路径

来自分类Dev

避免D3更新中的无效路径格式错误

来自分类Dev

在d3中单击获取沿路径或直线的位置

来自分类Dev

D3 SVG中的选择

来自分类Dev

当应用蒙版时,由d3(d3.svg.arc)创建的SVG路径元素消失

来自分类Dev

D3中的GeoJSON:路径未绑定到数据

来自分类Dev

svg路径中的d3 js三角形

来自分类Dev

D3 svg 路径重叠

来自分类Dev

更新 svg 和 d3 中的路径样式