保存matplotlib / networkx图无边距(Saving a matplotlib/ne

2019-09-18 23:38发布

当我用绘制图形matplotlib我怎么保存它无需额外的利润? 通常,当我将它保存为

plt.savefig("figure.png") # or .pdf

我与一些利润率得到它:

例:

import matplotlib.pyplot as plt
import networkx as nx

G=nx.Graph()

G.add_edge('a','b',weight=1)
G.add_edge('a','c',weight=1)
G.add_edge('a','d',weight=1)
G.add_edge('a','e',weight=1)
G.add_edge('a','f',weight=1)
G.add_edge('a','g',weight=1)

pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75')

nx.draw_networkx_edges(G,pos,
                width=2,edge_color='b')

plt.axis('off')
plt.savefig("degree.png", bbox_inches="tight")
plt.show() 

更新2:

的空间被设置在轴内。这是清楚的,如果我除去plt.axis('off')
所以,我认为有一些技巧与包Networkx使用。

Answer 1:

下面添加代码保存之前,控制剧情的限制。

尝试不同的价值观cut ,就像从1.05到1.50,直到你认为合适的。

# adjust the plot limits
cut = 1.05
xmax= cut*max(xx for xx,yy in pos.values())
ymax= cut*max(yy for xx,yy in pos.values())
plt.xlim(0,xmax)
plt.ylim(0,ymax)


Answer 2:

尝试plt.savefig("figure.png", bbox_inches="tight")

编辑:啊,你没有你正在使用networkx(虽然现在我看到它在标签中列出)提及。 bbox_inches="tight"就是紧紧裁剪图的方式。 我不知道是什么networkx在做什么,但我想它的设置是对轴增加额外的空间中的一些情节参数。 你应该寻找networkx而不是matplotlib的解决方案。 (它可能是,例如,该networkx是增加了空间的 ,而不是数字里面,它是什么样子,如果你删除喜欢axis('off')电话吗?)



Answer 3:

不知道networkx的细节我不能肯定,这将工作,但在matplotlib的轴外彻底删除空格,你可以做线沿线的东西:

import matplotlib.pyplot as plt
ax = plt.axes([0, 0, 1, 1])
plt.plot(range(10))


Answer 4:

一个黑客一点,但如果你使用nx.draw,那么它更紧密的配合。

所以,你可以做

nx.draw(G,pos,node_size=1200,node_shape='o',node_color='0.75', edgelist = [])

刚刚绘制的节点和没有棱角。 然后,它的细做

nx.draw_networkx_edges(G, pos, width=2, edge_color='b')


Answer 5:

使用以下命令:

plt.margins(0.0)


文章来源: Saving a matplotlib/networkx figure without margins