【问题标题】:How to style nodes in d3 directed graph based on groups using reactjs如何使用 reactjs 基于组在 d3 有向图中设置节点样式
【发布时间】:2018-01-06 13:14:44
【问题描述】:

我正在使用 d3 生成基于此示例的力导向图:Force-directed graph example in d3

我正在结合 React 实现这一点,其中 d3 强制有向图,reactjs 呈现可视化。

现在我想根据分配到的组来设置节点的样式(颜色)。这是我的节点数据:

var nodes = [
{"name":"node1","group":"2"},
{"name":"node2","group":"4"},
{"name":"node3","group":"5"}]

在这个example 中,他们实际上做了完全相同的事情,除了没有 reactjs。但是,我找不到任何与 reactjs 结合使用的明确方法。

【问题讨论】:

    标签: reactjs d3.js d3-force-directed


    【解决方案1】:

    理想的图形库,如 d3.js,plotly.js 只需要布局和数据。单独节点的颜色分配是在内部完成的。但是,您可以这样做:

    假设这是您的数据:

    const nodes = [{
        "name": "Vertex 5",
        "group": "1"
      },
      {
        "name": "Vertex 9",
        "group": "4"
      },
      {
        "name": "Vertex 15",
        "group": "5"
      }
    ];
    

    您需要使用 d3 api 在您的组和颜色之间创建映射。您可以通过将以下内容添加到创建节点的组件中来做到这一点:

    var color = d3.scaleOrdinal(d3.schemeCategory10); 
    

    然后您可以将此映射传递给负责创建有向图的组件,即在您的情况下,在 render 方法中:

    fill={color(d.group)}
    

    这告诉 fill 属性从变量 color 的映射中获取填充,通过变量 d 查看每个节点。

    【讨论】:

    • 你的代码sn-p和我的数据一样。但我的问题是,鉴于我在数据中对节点进行了分组,如何使用 reactjs 确保它们具有某种颜色。
    • 对不起,如果我的回答偏离轨道,但如果您想为特定节点赋予特定颜色。你应该在某处有组名和颜色映射。我不知道您想要特定节点的颜色是什么,这就是我使用随机函数的原因。你可以有自己的映射
    • 我使用var color = d3.scaleOrdinal(d3.schemeCategory10); 进行映射。现在下一步是确保 reactjs 呈现映射并为节点着色。我不确定,但我认为它应该类似于fill={() => color(d.group)} 之类的定义。但它不起作用。
    • 我已经进行了更改,如果这不能满足您的需求,请分享反应组件代码。在这种情况下我可以很好地回答
    • 我找到了一种方法来完成我想要的。 stack26,如果我编辑你的答案(和你的代码)以表明它是问题的正确答案,这样好吗?
    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多