Matplotlibフィギュアfacecolor(背景色)


95

フィギュアのフェイスカラーを設定するときに、以下のコードが機能しない理由を誰かが説明できますか?

import matplotlib.pyplot as plt

# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(11)
fig1.set_figwidth(8.5)

rect = fig1.patch
rect.set_facecolor('red') # works with plt.show().  
                          # Does not work with plt.savefig("trial_fig.png")

ax = fig1.add_subplot(1,1,1)

x = 1, 2, 3
y = 1, 4, 9
ax.plot(x, y)

# plt.show()  # Will show red face color set above using rect.set_facecolor('red')

plt.savefig("trial_fig.png") # The saved trial_fig.png DOES NOT have the red facecolor.

# plt.savefig("trial_fig.png", facecolor='red') # Here the facecolor is red.

fig1.set_figheight(11) fig1.set_figwidth(8.5)これらを使用して図形の高さと幅を指定すると、コマンドで取得されplt.savefig("trial_fig.png")ます。ただし、フェイスカラー設定は取得されません。どうして?

ご協力いただきありがとうございます。

回答:


134

これsavefigは、図の背景の顔の色を上書きするためです。

(これは実際には意図的なものです...おそらく、保存されたフィギュアの背景色をfacecolorkwargで制御したいと思うでしょうsavefig。ただし、これは混乱を招き、一貫性のないデフォルトです!)

最も簡単な回避策は、実行することですfig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(実際の図のデフォルトのエッジカラーは白であり、保存された図の周囲に白い境界線が表示されるため、ここではエッジカラーを指定しています)

お役に立てば幸いです。


30

イニシャルで選択した色を取得するには、transparentキーワードを使用する必要がありました

fig=figure(facecolor='black')

このような:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)

4
transparent=Trueあなたが提供する場合、なぜあなたは使用しますfacecolorか?
Alexis.Rolland

27

savefigの独自のパラメータがありfacecolorます。受け入れられた答えよりもさらに簡単な方法は、毎回置くのではなく、一度だけグローバルに設定することだと思いますfacecolor=fig.get_facecolor()

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'

0

背景色を変更したい場合は、次のことを試してください。

plt.rcParams['figure.facecolor'] = 'white'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.