保存没有边距的matplotlib / networkx数字

时间:2012-07-02 18:10:15

标签: python matplotlib networkx

当我使用matplotlib绘制图形时如何保存它而没有额外的边距? 通常当我将其保存为

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

我得到了一些利润:

  

enter image description here

示例:

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包有一些技巧。

6 个答案:

答案 0 :(得分:9)

在保存之前添加以下代码以控制绘图限制。

尝试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)

答案 1 :(得分:8)

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

编辑:啊,你没有提到你使用的是networkx(虽然现在我看到它在标签中列出)。 bbox_inches="tight"是紧紧裁剪人物的方法。我不知道networkx正在做什么,但我想它正在设置一些为轴添加额外空间的绘图参数。您应该在networkx而不是matplotlib中寻找解决方案。 (例如,可能是networkx正在添加内的空间,而不是图中;如果删除axis('off')调用,它会是什么样子?)

答案 2 :(得分:0)

在不知道networkx的细节的情况下,我无法确定这是否有效,但是为了从matplotlib中的轴外部完全删除空白,您可以执行以下操作:

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

答案 3 :(得分:0)

有点黑客,但如果你使用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')

答案 4 :(得分:0)

使用以下内容:

plt.margins(0.0)

答案 5 :(得分:0)

要使图形居中,您可以使用以下内容:

cut             = 1.1
xmax            = max(xx for xx,yy in pos.values())
ymax            = max(yy for xx,yy in pos.values())
xmin            = min(xx for xx,yy in pos.values())
ymin            = min(yy for xx,yy in pos.values())

xincrease       = (cut - 1)*xmax
yincrease       = (cut - 1)*ymax

plt.xlim(xmin - xincrease, cut*xmax)
plt.ylim(ymin - yincrease, cut*ymax)
相关问题