无法保存在Networkx和Matplotlib中制作的图形

时间:2018-06-27 09:39:28

标签: python matplotlib networkx

我正在使用NetworkX和matplotlib绘制以png图像为节点的图形。这是我的代码:

import networkx as nx 
import matplotlib.pyplot as plt 
G = nx.DiGraph()

#DRAWING EDGES ON AXIS 
G.add_edges_from(([1,2],[3,4],[5,6],[7,8]))
pos = nx.circular_layout(G)
fig = plt.figure(figsize=(20, 20)) 
ax = plt.axes([0, 0, 15, 15])
ax.set_aspect('equal') 
nx.draw_networkx_edges(G, pos, ax=ax, arrows=True)

#TRANSFORMING COORDINATES 
trans = ax.transData.transform 
trans2 = fig.transFigure.inverted().transform 

#PUTTING IMAGE INSTEAD OF NODES 
size = 0.2 
p2 = size / 2.0 

for n in G:
   xx, yy = trans(pos[n]) 
   xa, ya = trans2((xx, yy)) 
   a = plt.axes([xa - p2, ya - p2, size, size])
   a.set_aspect('equal')
   a.imshow(image, aspect='auto')
   a.axis('off')

plt.savefig('save.png') 
plt.show()

Jupyter笔记本显示图形。但是,当我使用Pycharm时,它会显示空白的白色数字。通过plt.savefig()保存也不起作用。我尝试在plt.savefig()中使用dpi,但没有进行任何更改。任何线索将不胜感激。

3 个答案:

答案 0 :(得分:1)

保存时添加bbox_inches='tight'解决了该问题:

plt.savefig('save.png',bbox_inches='tight')

此参数会在输出图像周围剪切不必要的空白边距。没有它,整个数字的一​​部分将被保存。

关于如何在matplotlib中保存纯图像的重要讨论在这里: scipy: savefig without frames, axes, only content

  

您可以在轴内找到图像的bbox(使用   get_window_extent),并使用bbox_inches参数仅保存   图片的那部分

答案 1 :(得分:0)

我以前也有类似情况。您能尝试一下吗?

import matplotlib 
matplotlib.use('Agg')
import matplotlib.pyplot as plt

答案 2 :(得分:0)

plt.axes需要一个矩形,其坐标表示为图形画布的一部分。给定figsize=(20,20)

ax = plt.axes([0, 0, 15, 15])

应该是

ax = plt.axes([0, 0, 0.75, 0.75])