【问题标题】:Draw graph with time label on the nodes在节点上绘制带有时间标签的图形
【发布时间】:2014-06-16 21:41:01
【问题描述】:

我有一个(有向无环)图,每个节点都有一个离散的时间戳,即每个节点都标有一个数字:1,2,3,4...

图表可能有多个组件,并且时间戳随着图表的方向而增加。

我将图形作为 netowrkx 对象,现在我想用图形 s.t. 在 python 中创建一个图形。节点的高度由它的时间戳决定(顶部的时间戳较低,底部的时间戳较高,具有相同时间戳的节点处于相同高度)。这意味着例如,如果两个组件的时间戳不同,则它们可能在不同的初始高度“开始”(它们的根的高度)。

另一方面,给定节点 A 标记为时间 = 4,节点 B 标记为 5,我希望 B 在图中较低。

第三个例子:如果 2 个节点是第三个节点的子节点,但它们是在不同时间创建的 - 最新节点的边会更长,s.t.每个孩子都将处于自己的时间级别。

现在写,我的代码很简单:

import networkx as nt
import matplotlib.pyplot as plt

graph = networkx.DiGraph() 
self.graph.add_node("A", time = 1)
...# Add more nodes
graph.add_edge("A","B")
...# Add more edges
plt.figure(1,figsize=(30,10))
pos=nt.graphviz_layout(graph,prog='dot')
networkx.draw(graph,pos,with_labels=False,arrows=True, node_size = 80)

(我没有足够的声誉来上传结果图片...:-))

如何在 Python 中绘制这个?哪个包可以帮助我?

【问题讨论】:

  • 有点不清楚,但如果我理解正确,您想根据时间戳指定每个节点的高度。不能设置每个节点的几何位置吗?向我们展示您到目前为止所做的工作(代码)可以帮助我们了解应该改变什么或采取不同的方式。
  • 谢谢雷蒂。如何在networkx中指定节点的几何位置?图表可能很大,所以我肯定需要它是自动的。

标签: python graph plot networkx


【解决方案1】:

节点的位置在字典中定义,键是节点的名称,值是带有 x 和 y 坐标的元组。

您可以通过在创建后打印pos 变量来看到这一点:

pos=nt.graphviz_layout(graph,prog='dot')
print pos

# EXAMPLE RESULT
{'A': (51.5, 15.3), 'B': (20.0, 60.4)}

y 坐标值越高,节点在图中的位置越高。因此,如果您希望根节点位于顶部(时间戳值较低),只需使用时间戳的负数,因为 -1 将高于 -2。

要自动化放置节点的过程,您需要一些基于时间的方程式。

pos = {}
for key, value in graph.node.items():
    height = value['time']    # Time value as defined when adding the node `key`
    pos[key] = (50, -height)

这将根据它们的时间戳垂直放置节点。因此,在时间 1 和 4 创建的两个节点之间的距离将是在时间 1 和 2 创建的两个节点的两倍。在此示例中,我将水平分量保持为静态 (50),并且所有节点将最终形成一条垂直线.您应该能够根据自己的需要进行更改。

【讨论】:

  • 嗨 Reti,谢谢 - 这很有帮助。这是我的第一个堆栈溢出问题——看到这个网站的力量和周围的好人,这非常令人印象深刻。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2019-07-17
  • 1970-01-01
  • 2011-06-18
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多