使用 NetworkX 和 Matplotlib 的图形的高分辨率图像

Pra*_*dra 4 python matplotlib networkx

我有一个 python 代码来生成一个包含 300 个节点和 200 个边的随机图并显示它

import networkx as nx
import matplotlib.pyplot as plt

G = nx.gnm_random_graph(300,200)
graph_pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, graph_pos, node_size=10, node_color='blue', alpha=0.3)
nx.draw_networkx_edges(G, graph_pos)
nx.draw_networkx_labels(G, graph_pos, font_size=8, font_family='sans-serif')
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,因为节点太多,所以我需要有更多的像素,以便我可以放大并保存它。

如果我把

plt.figure(figsize=(18,18))
Run Code Online (Sandbox Code Playgroud)

在显示之前,节点和边不会出现。有什么问题,我该如何解决?

arm*_*ita 8

绘图窗口使用屏幕分辨率,您可以缩放它而不会丢失信息。如果您figure在显示它之前放置一个,则唯一应该发生的事情是将出现两个窗口(因为您已经有一个图形在工作)。因此,如果您想自定义图形大小,请在填充绘图之前执行此操作:

import networkx as nx
import matplotlib.pyplot as plt

plt.figure(figsize=(18,18))

G = nx.gnm_random_graph(300,200)
graph_pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, graph_pos, node_size=10, node_color='blue', alpha=0.3)
nx.draw_networkx_edges(G, graph_pos)
nx.draw_networkx_labels(G, graph_pos, font_size=8, font_family='sans-serif')

plt.show()
Run Code Online (Sandbox Code Playgroud)

要获得可以缩放并避免看到大像素的图像(此处分辨率很重要),您可以:

plt.savefig("plot.png", dpi=1000)
Run Code Online (Sandbox Code Playgroud)

,以非常大的 dpi 保存 png。或者:

plt.savefig("plot.pdf")
Run Code Online (Sandbox Code Playgroud)

,这会将绘图保存为矢量图形(转换为 pdf)。Matplotlib 绘图窗口有一个工具,可让您放大绘图的任何部分:

matplotlib 图中的缩放工具