Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Matplotlib + NetworkX -在单个图形中绘制2个网络

Matplotlib + NetworkX -在单个图形中绘制2个网络
EN

Stack Overflow用户
提问于 2015-03-18 10:13:20
回答 1查看 3.8K关注 0票数 3

如果您知道如何使用Matplotlib,那么您可能可以在不了解NetworkX的情况下回答问题。

我有两个网络可以用NetworkX绘制,我想在一个图形中并排画,显示每一个的轴。本质上,这是在Matplotlib中创建两个子图的问题(这是NetworkX用来绘制图形的库)。

网络中每个节点的位置分布在0,area_size的区域内,但通常没有坐标x= 0.0或y= area_size的点。也就是说,点出现在0、area_size或更小的区域内。不是更大。

每个子图的比例应为0.8×1.0,用0.16x1.0的面积隔开。

本质上,它应该是这样的(假设area_size = 100)。

然后我必须在这2幅图之间画线,所以我需要一些方法回到每个图中的位置,以便连接它们。

生成、存储和分配节点位置如下

代码语言:javascript
运行
AI代码解释
复制
# generate and store node positions
positions = {}
for node_id in G.nodes():
    pos_x = # generate pos_x in [0.0, area_size]
    pos_y = # generate pos_y in [0.0, area_size]

    positions[node_id]['x'] = pos_x
    positions[node_id]['y'] = pos_y

    G.node[node_id]['x'] = pos_x
    G.node[node_id]['y'] = pos_y

然后将这些位置存储在字典pos = {node_id: (x, y), ...}中。NetworkX获取此结构来绘制nx.draw_network(G, pos=positions)正确位置上的节点。

现在,我要做以下几点:

  • 计算第一个网络在0,area_size上的位置,然后将它们扩展到0,area_size*0.8
  • 用同样的方法计算第二个网络的位置。
  • 将第二个网络的位置移到右边,将area_size*0.8 + area_size*0.16相加到x坐标
  • 设置数字大小(以英寸为单位) plt.figure(figsize=(h, w), dpi=100)
  • 设置x轴plt.xlim(0.0, area_size*0.8*2 + area_size*0.16)
  • 设置y轴plt.ylim(0.0, area_size)
  • 绘制第一个网络(传递其位置)
  • 绘制第二个网络(传递其位置)
  • 在两个网络之间画线

我得到的图有正确的比例,但轴没有显示正确的信息。我应该把轴藏起来,画假的吗?

我可能需要一些更好的程序来画出适当的分图。

我还注意到,当我导出到pdf时,我设置的数字大小并不总是受到尊重。

NetworkX用于绘制图形的函数是这些,特别是我使用的是网络

如果它们给我带来太多麻烦的话,我真的不介意画出单独的斧头。

EN

回答 1

Stack Overflow用户

发布于 2015-03-18 19:24:26

我发现要使Matplotlib产生精确的比例需要一些调整。通常,它需要做一些简单的计算来计算出你想要的比率(例如,你希望每个子图的高度是1.25它的宽度,通过你的测量)。

至于PDF不尊重数字大小,可能是因为您指定了DPI。不需要指定DPI,因为PDF以向量格式保存。或者您使用的是plt.tight_layout函数,它可能很有用,但可以改变图形大小。

在子情节之间划线是一场噩梦。首先,您必须使用变换从轴坐标系转换为图形坐标系。然后你可以把线直接画到图形上。这个职位可能会有帮助。

下面的代码应该会有帮助。您需要以多种方式对其进行调整,但希望它能够帮助您生成所需的数字。

代码语言:javascript
运行
AI代码解释
复制
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.lines as lines

# Generate some random graphs and positions for demonstrative purposes.
G1 = nx.gnp_random_graph(10, 0.2)
G2 = nx.gnp_random_graph(10, 0.2)
pos1 = nx.spring_layout(G1)
pos2 = nx.spring_layout(G2)

# Set up the figure with two subplots and a figure size of 6.5 by 4 inches.
fig, ax = plt.subplots(1, 2, figsize=(6.5, 4))

# Set the x and y limits for each axis, leaving a 0.2 margin te ensure
# that nodes near the edges of the graph are not clipped.
ax[0].set_xlim([-0.2, 1.2])
ax[0].set_ylim([-0.2, 1.2])
ax[1].set_xlim([-0.2, 1.2])
ax[1].set_ylim([-0.2, 1.2])

# Stretch the subplots up, so that each unit in the y direction appears 1.25
# times taller than the width of each unit in the x direction.
ax[0].set_aspect(1.25)
ax[1].set_aspect(1.25)

# Remove the tick labels from the axes.
ax[0].xaxis.set_visible(False)
ax[0].yaxis.set_visible(False)
ax[1].xaxis.set_visible(False)
ax[1].yaxis.set_visible(False)

# Set the space between the subplots to be 0.2 times their width.
# Also reduce the margins of the figure.
plt.subplots_adjust(wspace=0.2, left=0.05, right=0.95, bottom=0.05, top=0.95)

# Draw the networks in each subplot
nx.draw_networkx(G1, pos1, ax=ax[0], node_color='r')
nx.draw_networkx(G2, pos2, ax=ax[1], node_color='b')

# Now suppose we want to draw a line between nodes 5 in each subplot. First, we need to
# be able to convert from the axes coordinates to the figure coordinates, like so.
# (Read the matplotlib transformations documentation for more detail).
def ax_to_fig(coordinates, axis):
    transFig = fig.transFigure.inverted()
    return transFig.transform((axis.transData.transform((coordinates))))

# Now we can get the figure coordinates for the nodes we want to connect.
line_start = ax_to_fig(pos1[5], ax[0])
line_end = ax_to_fig(pos2[5], ax[1])

# Create the line and draw it on the figure.
line = lines.Line2D((line_start[0], line_end[0]), (line_start[1], line_end[1]), transform=fig.transFigure)
fig.lines = [line]

# Save the figure.
plt.savefig('test_networks.pdf', format='pdf')

编辑

上面的代码似乎并没有精确地在对应节点的中心之间绘制轴线之间的直线。删除ax.set_aspect函数修复了这个问题,但是现在的比例是错误的。为了适应这种情况,您可以手动更改节点的y位置( NetworkX使其变得比应该的要难得多)。接下来,您必须更改ax.set_ymin值以获得正确的比例,如下所示:

代码语言:javascript
运行
AI代码解释
复制
# Manually rescale the positions of the nodes in the y-direction only.
for node in pos1:
    pos1[node][1] *= 1.35
for node in pos2:
    pos2[node][1] *= 1.35

# Set the x and y limits for each axis, leaving a 0.2 margin te ensure
# that nodes near the edges of the graph are not clipped.
ax[0].set_xlim([-0.2, 1.2])
ax[0].set_ylim([-0.2, 1.55])
ax[1].set_xlim([-0.2, 1.2])
ax[1].set_ylim([-0.2, 1.55])
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29129636

复制
相关文章
Keras 模型多输出 loss weight metrics 设置
keras支持模型多输入多输出,本文记录多输出时loss、loss weight和metrics的设置方式。 模型输出 假设模型具有多个输出 classify: 二维数组,分类softmax输出,需要配置交叉熵损失 segmentation:与输入同尺寸map,sigmoid输出,需要配置二分类损失 others:自定义其他输出,需要自定义损失 具体配置 model 变量均为模型中网络层 inputs = [input_1 , input_2] outputs = [classify, segm
为为为什么
2022/08/05
5770
R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列
递归神经网络被用来分析序列数据。它在隐藏单元之间建立递归连接,并在学习序列后预测输出。 在本教程中,我们将简要地学习如何用R中的Keras RNN模型来拟合和预测多输出的序列数据,你也可以对时间序列数据应用同样的方法。我们将使用Keras R接口在R中实现神经网络:
拓端
2021/09/30
2.2K0
R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列
预测金融时间序列——Keras 中的 MLP 模型
本文的目的是展示使用时间序列从数据处理到构建神经网络和验证结果的过程。作为一个例子,金融系列被选择为完全随机的,一般来说,如果传统的神经网络架构能够捕获必要的模式来预测金融工具的行为,那就很有趣了。
磐创AI
2021/11/11
5.4K1
预测金融时间序列——Keras 中的 MLP 模型
Keras学习(一)—— Keras 模型(keras.model): Sequential 顺序模型 和 Model 模型
首先了解Keras的一个很好的途径就是通过 文档 Keras 中文文档地址: https://keras.io/zh/models/about-keras-models/
全栈程序员站长
2022/11/15
1.6K0
Keras模型
文件下载:https://download.csdn.net/download/sxf1061700625/19229828
小锋学长生活大爆炸
2021/06/11
5270
Keras保存模型
一、不保存模型只显示大概结构 model.summary() 这个函数会打印模型结构,但是仅仅是打印到控制台。
润森
2019/11/04
1.1K0
9种平台帮助你深度学习Keras
Keras是一个Python深度学习库,它可以使用高效的Theano或TensorFlow符号数学库作为后端。同时,Keras很容易使用,你可以在几分钟内开发出你的第一个多层感知器,卷积神经网络,或者
AiTechYun
2018/03/02
8390
9种平台帮助你深度学习Keras
6 种用 LSTM 做时间序列预测的模型结构 - Keras 实现
LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网络,可以解决 RNN 无法处理长距离的依赖的问题,在时间序列预测问题上面也有广泛的应用。
杨熹
2019/04/07
10.4K1
Keras 实现 LSTM时间序列预测
本文将介绍如何用 keras 深度学习的框架搭建 LSTM 模型对时间序列做预测。
机器学习AI算法工程
2019/10/28
2.4K1
Keras 学习笔记(三)Keras Sequential 顺序模型
你可以通过将网络层实例的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型:
种花家的奋斗兔
2020/11/12
2.4K0
根据序列,进行中后序列输出
#include #include #include #include typedef struct BiTNode {//二叉树结点 char data; //数据 struct BiTNode* lchild, * rchild; //左右孩子指针 } BiTNode, * BiTree; int nn = 0; int CreateBiTree(BiTree* T) {//按先序序列创建二叉树 char data; sc
川川菜鸟
2021/10/18
2570
序列生成模型(一):序列概率模型
  序列数据在深度学习应用中非常常见,它们是按照时间顺序或者其他顺序排列的数据集合。序列数据的处理通常涉及到捕捉数据中的时间关系、趋势和模式,因此需要使用专门的模型来处理这些信息。以下是一些常见的序列数据类型以及相应的深度学习应用:
Qomolangma
2024/07/30
2380
序列生成模型(一):序列概率模型
可视化Keras模型
您是否曾经想过您的神经网络实际上是如何连接不同的神经元的?如果您可以可视化所设计的模型架构,那不是很好吗?如果您可以将模型架构下载为演示时可以使用的图像,那不是很好吗?如果所有这些都为“是”,那么您来对地方了。 在本文中,我将向你展示一个Ë xciting Python包/模块/库,可用于可视化Keras模型。无论是卷积神经网络还是人工神经网络,该库都将帮助您可视化所创建模型的结构。 Keras Visualizer是一个开源python库,在可视化模型如何逐层连接方面确实很有帮助。因此,让我们开始吧。
致Great
2021/02/25
1.5K0
可视化Keras模型
C#序列化反序列化帮助类
//转载:http://hi.baidu.com/fxh19860822/blog/item/df35230b3ded441495ca6bd5.html 在C#中常见的序列化的方法主要也有三个:BinaryFormatter、SoapFormatter、XML序列化 /// <summary> /// 提供序列化和反序列化对象的相关静态方法。 /// </summary> public class SerializerHelper { ///
跟着阿笨一起玩NET
2018/09/18
1.6K0
Keras多输入模型实例
一般情况下,利用Keras建立模型,会使用线性模型(Sequential),但是在一些特殊情况下,我们或许会有多个input,这样的话,我们就不会使用线性模型,而使用Keras的Model。
Ziyue
2020/01/15
2.4K0
Keras多输入模型实例
keras系列︱Sequential与Model模型、keras基本结构功能(一)
该文章介绍了在深度学习模型中,不同的层对输入进行计算,从而影响模型的性能。文章详细讨论了卷积层、池化层、全连接层和LSTM层的特点和作用,以及如何使用这些层来构建高性能的模型。此外,文章还探讨了如何通过冻结层和重新训练层来提高模型的性能。
悟乙己
2018/01/02
10.2K0
keras系列︱Sequential与Model模型、keras基本结构功能(一)
理解keras中的sequential模型
keras中的主要数据结构是model(模型),它提供定义完整计算图的方法。通过将图层添加到现有模型/计算图,我们可以构建出复杂的神经网络。
云水木石
2019/07/02
3.7K0
keras中文-快速开始Sequential模型
模型需要知道输入数据的shape,因此,Sequential的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。有几种方法来为第一层指定输入数据的shape
CreateAMind
2018/07/25
9420
keras中文-快速开始Sequential模型
Keras中的多变量时间序列预测-LSTMs
神经网络诸如长短期记忆(LSTM)递归神经网络,几乎可以无缝地对多变量输入问题进行建模。
朱卫军 AI Python
2022/04/02
3.2K0
Keras中的多变量时间序列预测-LSTMs
python在Keras中使用LSTM解决序列问题
时间序列预测是指我们必须根据时间相关的输入来预测结果的问题类型。时间序列数据的典型示例是股市数据,其中股价随时间变化。
拓端
2020/09/26
3.6K0

相似问题

Keras加载的模型输出与训练模型输出不同。

10

Keras序列模型返回损失'nan‘

30

Keras模型的输出训练参数

10

产生相同输出的Keras模型

50

Keras中间层(注意模型)输出

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档