You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在保留红色线条的同时移除D3.js路径上的黑色线条?

解决D3.js图表仅保留红色线条的问题

我需要修改以下D3.js代码,让图表只保留红色线条、移除黑色线条,目前的图表效果如图所示。我试过网上搜索、咨询ChatGPT并修改代码片段,但都没解决问题。

当前效果截图:
当前图表效果

原代码

<script>
    var nodeData = [
        {id: "Midwives",       position: [100, 25],   parentPosition: [100, 25] },
        {id: "Nurses",   position: [25, 175],   parentPosition: [100, 25] },
        {id: "More Nurses",   position: [175, 175],  parentPosition: [100, 25] }];

     
    //Link generator with .source and .target set
    var link = d3.linkVertical()
        .source(d => d.parentPosition)
        .target(d => d.position)

    //Creating path elements by adding in our data and calling link
    d3.select("#demoSrcTar")
        .selectAll("path")
        .data(nodeData)
        .join("path")
        .attr("d", link)
        .style('opacity', 0.5)
        //.classed("link", true)
        .attr("stroke", "red")
        .attr("stroke-width", 5)
        .transition().duration(2000).attr("stroke", "red");
</script>

问题分析与解决方案

黑色线条出现的核心原因是第一个数据项Midwives的起点和终点坐标完全相同,生成了一个零长度的路径元素,虽肉眼看不到完整线条,但浏览器可能渲染出黑色小点(或受全局CSS默认样式影响显示为黑色);另外若容器内之前存在未清理的path元素,也会残留黑色线条。

修改方案:

  1. 过滤掉起点与终点坐标一致的数据,避免生成无效路径
  2. 确保容器内旧的path元素被完全替换或清空

修改后的代码

<script>
    var nodeData = [
        {id: "Midwives",       position: [100, 25],   parentPosition: [100, 25] },
        {id: "Nurses",   position: [25, 175],   parentPosition: [100, 25] },
        {id: "More Nurses",   position: [175, 175],  parentPosition: [100, 25] }];

    // 过滤掉起点终点重合的数据
    var validLinkData = nodeData.filter(d => {
        return d.position[0] !== d.parentPosition[0] || d.position[1] !== d.parentPosition[1];
    });

    //Link generator with .source and .target set
    var link = d3.linkVertical()
        .source(d => d.parentPosition)
        .target(d => d.position)

    //Creating path elements by adding in our data and calling link
    d3.select("#demoSrcTar")
        .selectAll("path")
        .data(validLinkData) // 使用过滤后的数据
        .join("path")
        .attr("d", link)
        .style('opacity', 0.5)
        .attr("stroke", "red")
        .attr("stroke-width", 5)
        .transition().duration(2000).attr("stroke", "red");
</script>

如果修改后仍有黑色线条,可在绑定数据前先清空容器内的所有path元素,添加一行:

d3.select("#demoSrcTar").selectAll("path").remove();

内容的提问来源于stack exchange,提问作者COOKIES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:18:32