如何在使用Matplotlib绘制NetworkX图形时修复图形被裁剪的问题?

3

我正在使用NetworkX和Matplotlib绘制节点,但是有时节点会被剪切在图形边缘处。是否有设置可以增加边距或防止它们被剪切的方法?

图像:节点被剪切在图形边缘处

示例程序:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

adjacency_matrix = np.array([[1,0,0,0,0,0,1,0],[0,1,1,1,1,0,0,0],[0,1,1,0,0,0,0,0],[0,1,0,1,0,0,0,0],
    [0,1,0,0,1,1,0,0],[0,0,0,0,1,1,1,1],[1,0,0,0,0,1,1,0],[0,0,0,0,0,1,0,1]])

nx_graph = nx.from_numpy_matrix(adjacency_matrix)
pos = nx.networkx.kamada_kawai_layout(nx_graph)

nx.draw_networkx_nodes(nx_graph, pos, node_color="#000000", node_size=10000)

nx.draw_networkx_edges(nx_graph, pos, color="#808080", alpha=0.2, width=2.0)

plt.axis('off')
plt.tight_layout()
plt.show()

只需将节点大小设置为一定大小即可实现此目的。我已经添加了一个示例程序来完成这个任务。 - Maximilian Levine
1个回答

7
您可以调整轴来避免节点被截断。
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

adjacency_matrix = np.array([[1,0,0,0,0,0,1,0],[0,1,1,1,1,0,0,0],[0,1,1,0,0,0,0,0],[0,1,0,1,0,0,0,0],
    [0,1,0,0,1,1,0,0],[0,0,0,0,1,1,1,1],[1,0,0,0,0,1,1,0],[0,0,0,0,0,1,0,1]])

nx_graph = nx.from_numpy_matrix(adjacency_matrix)
pos = nx.networkx.kamada_kawai_layout(nx_graph)

nx.draw_networkx_nodes(nx_graph, pos, node_color="#000000", node_size=10000)

nx.draw_networkx_edges(nx_graph, pos, color="#808080", alpha=0.2, width=2.0)

plt.axis('off')
axis = plt.gca()
axis.set_xlim([1.2*x for x in axis.get_xlim()])
axis.set_ylim([1.2*y for y in axis.get_ylim()])
plt.tight_layout()
plt.show()

根据你的节点大小,你可能需要调整因子 (1.2)。在你提供的示例中,这个值是有效的。更多信息请参考我在相关问题的回答。


有没有其他方法可以不缩放/收缩整个图形,只是扩大边框? - Maximilian Levine
如链接问题中所讨论的那样,您还可以增加figsize或(要返回旧版本的自动缩放)使用旧版matplotlib。 - Sparky05

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接