16

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

4

6 回答 6

11

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

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

于 2012-07-02T18:11:46.503 回答
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)
于 2012-07-02T19:55:32.003 回答
2

使用以下内容:

plt.margins(0.0)
于 2019-02-05T01:17:09.447 回答
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')
于 2015-10-13T09:58:58.550 回答
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)
于 2021-07-24T20:10:25.847 回答
-1

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

import matplotlib.pyplot as plt
ax = plt.axes([0, 0, 1, 1])
plt.plot(range(10))
于 2012-07-03T21:50:41.463 回答