1. ホーム
  2. python

[解決済み] Matplotlib 図形の顔色 (背景色)

2022-08-18 08:13:46

質問

以下のコードが、フィギュアのフェイスカラーを設定する際に機能しない理由を、どなたか教えていただけませんか?

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") . しかし、facecolorの設定は拾われません。なぜでしょうか?

ご教授ありがとうございます。

どのように解決するのですか?

それは savefig が図の背景のfacecolorを上書きしているからです。

(これは実は意図的なものです...。というのも、保存された図の背景色を facecolor へのクワーグを savefig . 紛らわしくて一貫性のないデフォルトですがね!)

最も簡単な回避策は、単に fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none') (ここでedgecolorを指定しているのは、実際の図のデフォルトのedgecolorが白だからで、これでは保存した図の周りに白いボーダーが出来てしまいます)

お役に立てれば幸いです。