2012-07-02 74 views
13

matplotlibを使用して図を描画すると余分な余白なしで保存するにはどうすればよいですか? 通常、私はmatplotlib/networkx図形を余白なしで保存する

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パッケージで使用するトリックがあると思います。

答えて

8

を前に、プロットの制限を制御するために以下のコードを追加します節約する。

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) 
+0

ありがとうございます。それは機能しますが、数字の限界のいくつかの小さな部分を削除してください。私は完全な数字を取得していません。だから私は何とかそれを修正する必要があると思う。 – Aya

+2

あなたはより控えめなカット(1.02ではなく1.10または1.05)を試すことができます。キャンバスが収まるまでそれを変更してください。 – nye17

+0

私はまだ境界を自動的に修正する別の方法を好むでしょう。私はこれがNetworkxであると考えています。ノード形状 – Aya

9

お試しplt.savefig("figure.png", bbox_inches="tight")

編集:ああ、Networkxを使用していたとは言わなかった(今はタグに記載されていますが)。 bbox_inches="tight"は、図をしっかりと切り抜く方法です。 networkxが何をしているのか分かりませんが、軸に余分なスペースを追加するプロットパラメータを設定していると思います。 matplotlibではなくnetworkxで解決策を探すべきです。 (例えば、そのnetworkxは軸の内側に、ない数字をスペースを追加していることができ、あなたはそのaxis('off')コールを削除した場合、それはように見えるんでしょうか?)

+0

これは実際に余白を変更しません。ありがとうございます – Aya

+0

「マージン」とは何ですか? – BrenBarn

+0

ありがとうございます。私は余分な空白で図を保存したくありません。私はちょうど境界が図の限界を正確に近づけるようにしたい。これは明確ですか? – Aya

0

あなたはの線に沿って何かを行うことができ、networkxの詳細を知らなくても、私はこれが動作することを確信することはできませんが、matplotlibの中の軸の外側から完全に空白を削除するには:

import matplotlib.pyplot as plt 
ax = plt.axes([0, 0, 1, 1]) 
plt.plot(range(10)) 
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') 
関連する問題