【python】matplotlibで背景色と枠線の色を変える

はじめに

 matplotlibでは図(figure)の背景色と枠線(エッジ)の色を自由に設定できる。その方法についてメモしておく。
 目次
スポンサーリンク


設定方法

 plt.figure()の引数に渡してあげる。facecolorおよびedgecolor引数で指定できる。
 なお、枠線のデフォルト幅は0.0にされている。そのため、edgecolorを変更しても一見すると何も起きないように見える。linewidth引数で別途枠線の太さを指定して、はじめて効果を見ることができる。
 僕は最初これに気づかなくて、検索して答えにたどり着くまで無駄に色々試行錯誤してしまった。
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.figure(facecolor="azure", edgecolor="coral", linewidth=2)
plt.plot(x, y)
plt.show()
 こんな感じで表示される。
結果1
 見ての通り、axesの背景色は別に存在しているので、グラフの中だけ白く表示される。
 もし色を揃えたければ、axesを取得してこちらにも背景色を設定する。それか、rcParamのaxes.facecolor をいじる(こちらの方法だとすべてのaxesに対して設定が反映されるので注意)。
 方法1
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig = plt.figure(facecolor="azure", edgecolor="coral", linewidth=2)
ax = plt.subplot()
ax.plot(x, y)
ax.set_facecolor((1,1,1,0))
plt.show()
 方法2
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.rcParams["axes.facecolor"] = (1,1,1,0)
fig = plt.figure(facecolor="azure", edgecolor="coral", linewidth=2)
plt.plot(x, y)
plt.show()
 今回はどちらの方法でも結果は同じ。
結果2
 色そのものはalphaが0なら他は何でも良い(透過させるから)。もちろんalphaを0より大きくして任意の色を設定することも可能。
 ちなみにaxesにrcParamsでaxes.edgecolorを設定することもできる(することに意味があるかは不明)。set_edgecolor()は存在しないようだ。

plt.savefig()で反映されない

 上の画像はスクリーンショットで撮った。
 plt.savefig()ではこれらの背景色・枠線の色は反映されない。
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.figure(facecolor="azure", edgecolor="coral", linewidth=2)
plt.plot(x, y)
plt.savefig("result.png")
result.png
 理由は、plt.savefig()がfigureの設定を上書きするから(新たなfigureを作るような感じかな)。
 plt.savefig()自身がfacecolor, edgecolorなどの引数を取るので、そちらで指定してあげよう。
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.figure(linewidth=2)
plt.plot(x, y)
plt.savefig("result.png", facecolor="azure", edgecolor="coral")
 facecolor, edgecolorはこっちで指定すれば良いみたい。linewidthは上のplt.figure()側で指定しないと駄目。ルールがよくわからないが、とにかく動く。
result.png

まとめ

 やりたいことが単純な割に、注意点が多い気がする。「設定したのに反映されねえ」ってなるシチュエーションが容易に幾つも思い浮かぶ。
 ので、自分で設定するよりはseabornとかでスタイルを設定してそれを使った方が実用的かもしれない。
 けど、設定する方法を覚えておくと使いたいとき困らないので、知っておいて損はしないと思う。