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

时间:2016-03-28 04:25:26

标签: 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()

但是,由于节点太多,我需要有更多像素才能放大并保存。

如果我把

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

在显示之前,节点和边缘不会出现。问题是什么?如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

绘图窗口使用屏幕分辨率,您可以在不丢失信息的情况下进行缩放。如果你在显示它之前放置一个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()

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

plt.savefig("plot.png", dpi=1000)

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

plt.savefig("plot.pdf")

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

Zoom tool in matplotlib plot