我正在使用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,但没有进行任何更改。任何线索将不胜感激。
答案 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])