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

Aya*_*Aya 15 python matplotlib networkx

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

plt.savefig("figure.png") # or .pdf
Run Code Online (Sandbox Code Playgroud)

我得到了一些利润:

在此输入图像描述

例:

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() 
Run Code Online (Sandbox Code Playgroud)

更新2:

这些空间设置在轴内.如果我删除,这很清楚plt.axis('off')
所以我认为有一些技巧可以用于Networkx包.

Bre*_*arn 9

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

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


nye*_*e17 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)
Run Code Online (Sandbox Code Playgroud)

  • 你可以尝试更保守的剪裁(1.10或1.05而不是1.02),只需更改它直到画布适合. (2认同)

Pio*_*icz 5

使用以下内容:

plt.margins(0.0)
Run Code Online (Sandbox Code Playgroud)