NetworkX:分层绘制图形

2023-12-02

我有一个按级别划分的图表,即 f.e. :

ids : 0 - 100 are lowest level
ids : 101 - 500 are level 2
ids : 501 - 1500 are level 3
and so on ...

有没有某种方法可以强制图形在分层组织的级别中绘制节点,一个在另一个之上。

我想将它们堆叠起来而不溢出:)

在我的例子中,节点位于哪一层取决于节点 ID,但如果您有一些想法,它可能是其他一些组织原则。


到目前为止这似乎是可能的解决方案:

def plot(self):
    plt.figure()
    pos = nx.graphviz_layout(self.g,prog='dot')
    nx.draw(self.g, pos, node_size=650, node_color='#ffaaaa')

五层示例...

enter image description here


布局函数,例如nx.spring_layout,返回一个字典,其键是节点,其值是二元组(坐标)。这是一个例子pos字典可能看起来像:

In [101]: pos
Out[101]: 
{(0, 0): array([ 0.70821816,  0.03766149]),
 (0, 1): array([ 0.97041253,  0.30382541]),
 (0, 2): array([ 0.99647583,  0.63049339]),
 (0, 3): array([ 0.86691957,  0.86393669]),
 (1, 0): array([ 0.79471631,  0.08748146]),
 (1, 1): array([ 0.71731384,  0.35520076]),
 (1, 2): array([ 0.69295087,  0.71089292]),
 (1, 3): array([ 0.63927851,  1.        ]),
 (2, 0): array([ 0.42228877,  0.        ]),
 (2, 1): array([ 0.33250362,  0.3165331 ]),
 (2, 2): array([ 0.31084694,  0.69246818]),
 (2, 3): array([ 0.34141212,  0.9952164 ]),
 (3, 0): array([ 0.16734454,  0.11357547]),
 (3, 1): array([ 0.01560951,  0.33063389]),
 (3, 2): array([ 0.        ,  0.63044189]),
 (3, 3): array([ 0.12242227,  0.85656669])}

然后,您可以按照您喜欢的方式进一步操作这些坐标。例如,自从 这x and y返回的坐标spring_layout介于 0 和 1 之间,你 可以将图层级别值添加 10 倍y-将节点分成层的坐标:

for node in pos:
    level = node // nodes_per_layer
    pos[node] += (0,10*level)

import networkx as nx
import matplotlib.pyplot as plt

layers = 5
nodes_per_layer = 3
n = layers * nodes_per_layer
p = 0.2

G = nx.fast_gnp_random_graph(n, p, seed=2017, directed=True)
pos = nx.spring_layout(G, iterations=100)

for node in pos:
    level = node // nodes_per_layer
    pos[node] += (0,10*level)

nx.draw(G, pos, node_size=650, node_color='#ffaaaa', with_labels=True)
plt.show()

produces enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NetworkX:分层绘制图形 的相关文章

随机推荐

  • 如何为类中的模板定义类型别名[重复]

    这个问题在这里已经有答案了 例如 struct Option 1 template
  • 以编程方式为 RecyclerView Android 中的项目设置重力

    我正在使用 RecyclerView Android 制作带有左 右消息框的聊天线 我想为 RecyclerView 的项目设置重力 通常情况下 我将 itemView 转换为 LinearLayout 然后为其设置 ParamLayout
  • Spring Data Jpa - 类型规范已弃用

    我正在实现链接中的逻辑 Spring Data 多列搜索我想要搜索的地方FirstName 根据链接 https docs spring io spring data jpa docs current api org springframe
  • 在Win7中构建R igraph包

    我对源代码做了一个小改动igraph包因为我想基于以下实现森林防火方法广度优先搜索法 I used Rtools构建包并按照以下步骤操作link 但是 我收到一条错误消息 foreign graphml c 38 29 fatal erro
  • 即使在理解范围之后,列表理解也会重新绑定名称。这是正确的吗?

    推导式显示出与范围界定的不寻常交互 这是预期的行为吗 x original value squares x 2 for x in range 5 print x Prints 4 in Python 2 冒着抱怨的风险 这是一个残酷的错误来
  • 当其中存在 HTML 转义字符串时,使用 python (pandas) 读取 CSV 文件

    我正在尝试使用 pandas read csv 读取 CSV 文件 数据看起来像这样 示例 thing weight price colour apple 1 2 red m amp m s 0 10 several cherry 0 5
  • 如何在 PHP 中使用黑名单去除 HTML 标签?

    PHP strip tags使用白名单来跳过一些您不希望删除的标签 有人知道一些实现但使用黑名单而不是白名单吗 一个简单的复合正则表达式搜索就可以了 如果这仍然是关于您之前的问题 html preg replace gt i html
  • 用于社交共享的默认网站图像

    有什么方法可以设置在 Facebook 上分享我的网站时显示的默认图像吗 我注意到 Facebook 通常会从网站获取第一张图像用作缩略图 您需要设置开放图图像元标记 欲了解更多信息 请查看docs
  • 使一个类型类实例自动成为另一个类型类实例

    我想要实现的是以下类的任何实例 SampleSpace 应该自动成为一个实例Show 因为SampleSpace包含创建字符串表示所需的整个接口 因此该类的所有可能实例实际上都是相同的 LANGUAGE FlexibleInstances
  • C# 属性强制属性

    我创建了类似的属性 AttributeUsage AttributeTargets Class AllowMultiple true Serializable public class TestPropertyAttribute Syste
  • 为什么我的 SVG 文件不使用我的字体文件?

    我在同一目录中有这个 SVG 文件这个字体的TTF 文件
  • Mongo 中不区分大小写的搜索

    我在 Mongo 中使用不区分大小写的搜索 类似于https stackoverflow com q 5500823 1028488 IE 我正在使用带有选项 i 的正则表达式 但我在将正则表达式限制为这个词时遇到了麻烦 它的表现更像是 S
  • 基于用户偏好的动态表列

    Scenario 假设用户是一名推销员 用户模型有许多 log entries 用作销售数据的每日日志 用户还具有允许他们选择在其 log entry 表单中可见的字段的首选项 因此 如果他们选择菠萝 香蕉和葡萄 这些就是表单中的字段 如果
  • 仅从 Spring MVC 3 控制器返回字符串消息

    谁能告诉我如何从控制器返回字符串消息 如果我只是从控制器方法返回一个字符串 那么 spring mvc 将其视为 jsp 视图名称 在控制器中注释你的方法 ResponseBody RequestMapping value controll
  • 如何以编程方式在 C/C++ 中引发核心转储

    我想在我的 C 应用程序中的特定位置强制进行核心转储 我知道我可以通过执行以下操作来做到这一点 int crash NULL crash 1 但我想知道是否有更干净的方法 顺便说一句 我正在使用Linux 发出 6 号信号 SIGABRT在
  • 将 NULL 数组填充到自定义聚合函数的最大长度

    从问题的回答来看如何对 varchar 使用 array agg 我们可以创建一个自定义聚合函数来聚合 Postgres 中的 n 维数组 如下所示 CREATE AGGREGATE array agg mult anyarray SFUN
  • TransactionScope 内的 Membership.GetUser() 抛出 TransactionPromotionException

    下面的代码抛出一个TransactionAbortedException带有消息 交易已中止 和内部TransactionPromotionException消息 尝试促进交易失败 using TransactionScope transa
  • C# 解析日期和时间

    我在应用程序中有一些代码 类似于 DateTime activityDate DateTime Parse tempDate tempTime Where tempDate是一个字符串 其值如 2009 12 01 即 yyyy mm dd
  • 在后台运行脚本?

    简单的问题 有没有办法在后台运行脚本而不运行终端 更多细节和背景 我有一个应用程序 它读取应用程序的 log 文件并从中提取信息 然后从日志中的信息提供信息和统计信息 应用程序的更新改变了 log 文件的写入方式 删除信息并以我无法预测的方
  • NetworkX:分层绘制图形

    我有一个按级别划分的图表 即 f e ids 0 100 are lowest level ids 101 500 are level 2 ids 501 1500 are level 3 and so on 有没有某种方法可以强制图形在分