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包.
试试plt.savefig("figure.png", bbox_inches="tight").
编辑:啊,你没有提到你正在使用networkx(虽然现在我看到它在标签中列出). bbox_inches="tight"是紧紧裁剪人物的方法.我不知道networkx正在做什么,但我想它正在设置一些为轴添加额外空间的绘图参数.您应该在networkx而不是matplotlib中寻找解决方案.(例如,可能是networkx正在添加轴内的空间,而不是图;如果删除该axis('off')调用,它会是什么样子?)
在保存之前添加以下代码以控制绘图限制.
尝试不同的值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)