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が何をしているのかわかりませんが、軸に余分なスペースを追加するいくつかのプロットパラメータを設定していると思います。matplotlibではなくnetworkxで解決策を探す必要があります。(たとえば、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 に答える