【问题标题】:How to fix graphics being cut off when drawing NetworkX graphs with Matplotlib?使用 Matplotlib 绘制 NetworkX 图形时如何修复图形被切断的问题?
【发布时间】:2020-07-15 16:43:12
【问题描述】:

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

图片:Nodes being cut off at the edge of the graphic

示例程序:

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()

【问题讨论】:

  • 为此,您所要做的就是将 node_size 设置为超过一定的大小。我添加了一个执行此操作的示例程序。

标签: python matplotlib graph networkx


【解决方案1】:

您可以缩放轴以避免节点被切断

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)。在您给定的示例中,此值有效。更多信息请参阅我对related question 的回答。

【讨论】:

  • 有没有另一种方法不重新缩放/缩小整个图表,只是扩大边界?
  • 如链接问题中所述,您还可以增加 figsize 或(返回旧版本的自动缩放)使用旧版本的 matplotlib。
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2015-04-24
  • 2023-02-09
  • 2021-12-03
相关资源
最近更新 更多