Javascript d3确定最后一个元素路径的终点

Javascript d3确定最后一个元素路径的终点,javascript,d3.js,Javascript,D3.js,我有一块馅饼,我正在跟踪少于10%的碎片,我用它们画了一条额外的路径,我需要从最后一条路径画一条线,如下所示: 下面是一个例子: const height=300, 宽度=300, 保证金=30, 数据=[{ 浏览器:“谷歌浏览器”, 比率:42.52 }, { 浏览器:“Firefox”, 比率:16.23 }, { 浏览器:“Opera”, 比率:12.6 }, { 浏览器:“Internet Explorer”, 比率:8.97 }, { 浏览器:“Yandex浏览器”, 比率:9.1

我有一块馅饼,我正在跟踪少于10%的碎片,我用它们画了一条额外的路径,我需要从最后一条路径画一条线,如下所示:

下面是一个例子:

const height=300,
宽度=300,
保证金=30,
数据=[{
浏览器:“谷歌浏览器”,
比率:42.52
},
{
浏览器:“Firefox”,
比率:16.23
},
{
浏览器:“Opera”,
比率:12.6
},
{
浏览器:“Internet Explorer”,
比率:8.97
},
{
浏览器:“Yandex浏览器”,
比率:9.12
},
{
浏览器:“其他”,
比率:10.56
}
];
const color=d3.scale.category10();
常数半径=数学最小值(宽度-2*边距,高度-2*边距)/2;
常量arc=d3.svg.arc()
.外部(半径)
.内半径(0);
常量arc2=d3.svg.arc()
.外部(半径+5)
.内半径(半径+3);
const pie=d3.layout.pie()
.sort(空)
.价值(功能(d){
回报率;
});
const svg=d3.select(“body”).append(“svg”)
.attr(“类”、“轴”)
.attr(“宽度”,宽度)
.attr(“高度”,高度)
.附加(“g”)
.attr(“转换”,
“平移”(“+(宽度/2)+”,“+(高度/2)+”);
const g=svg.selectAll(“.arc”)
.数据(pie(数据))
.enter().append(“g”)
.attr(“类”、“弧”);
g、 附加(“路径”)
.attr(“d”,弧)
.样式(“填充”,功能(d){
返回颜色(d.data.browser);
});
g、 附加(“路径”)
.attr(“d”,arc2)
.style(“display”,d=>d.data.rate<10?'block':'none');
g、 附加(“文本”)
.attr(“转换”,函数(d){
返回“平移(“+弧形心(d)+”);
})
.style(“文本锚定”、“中间”)
.文本(功能(d){
返回d.data.browser;
});
受答案启发

  • 从最后一个元素中获取
    d
    属性

  • ust
    path.split(“L”)[1]。split(“A”)[0]
    以获取圆弧端点的位置

     g.filter(d=>d.data.rate < 10) // using filter to only draw what we need
             .append("path")
             .attr("class", "arc2")
             .attr("d", arc2)
    
     let last_arc2 = d3.selectAll(".arc2")[0][d3.selectAll(".arc2")[0].length-1]
    
     let last_arc2_end = d3.select(last_arc2).attr("d").split("L")[1].split("A")[0]
    
     let last_arc2_end_x = last_arc2_end.split(",")[0],
         last_arc2_end_y = last_arc2_end.split(",")[1]
     g.append("line")
             .attr("x1", last_arc2_end_x)
             .attr("x2", last_arc2_end_x)
             .attr("y1", last_arc2_end_y)
             .attr("y2", last_arc2_end_y-20)
             .style("stroke", "black") 
    
    g.filter(d=>d.data.rate<10)//使用filter只绘制我们需要的内容
    .append(“路径”)
    .attr(“类别”、“arc2”)
    .attr(“d”,arc2)
    让last_arc2=d3.selectAll(“.arc2”)[0][d3.selectAll(“.arc2”)[0]。长度-1]
    让last_arc2_end=d3。选择(last_arc2).attr(“d”).split(“L”)[1]。split(“A”)[0]
    设last_arc2_end_x=last_arc2_end.split(“,”[0],
    last_arc2_end_y=last_arc2_end.split(“,”)[1]
    g、 附加(“行”)
    .attr(“x1”,最后一个弧2\u结束\u x)
    .attr(“x2”,最后一个弧2\u结束\u x)
    .attr(“y1”,最后一个弧2结束)
    .attr(“y2”,最后一个弧2\u结束\u y-20)
    .style(“笔划”、“黑色”)
    

  • 如果弧结束在圆的后面,这条线会做什么?@Hugo Elhaj Lahsen补充道,最终小于10%的碎片必须被带上任何想法?需要帮助,需要帮助