プロットの背景色を変更するには?


226

私はmatplotlibで散布図を作成しており、実際のプロットの背景を黒に変更する必要があります。プロットの面の色を変更する方法を知っています:

fig = plt.figure()
fig.patch.set_facecolor('xkcd:mint green')

ここに画像の説明を入力してください

私の問題は、これがプロットの周りのスペースの色を変えることです。プロットの実際の背景色を変更するにはどうすればよいですか?


9
参考までに、@ Evertが言ったことに加えて、ax.patch.set_facecolor('black')axAxesインスタンスはどこにあるか)だけを使用できます。 fig.patchは、Figureの背景でax.patch、Axesの背景です。
Joe Kington、

回答:


230

次のいずれかの方法で作成しset_facecolor(color)axesオブジェクトメソッドを使用します。

  • フィギュアと軸を一緒に作成しました

    fig, ax = plt.subplots(nrows=1, ncols=1)
  • 図形を作成し、後で軸を作成しました

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
  • ステートフルAPIを使用しました(数行以上を実行している場合、特に複数のプロットがある場合、上記のオブジェクト指向のメソッドは、特定の図を参照したり、特定の軸にプロットしたり、カスタマイズしたりできるため、より簡単になります。どちらか)

    plt.plot(...)
    ax = plt.gca()

それからあなたは使うことができますset_facecolor

ax.set_facecolor('xkcd:salmon')
ax.set_facecolor((1.0, 0.47, 0.42))

軸にピンクの背景のプロットの例

どのような色になる可能性があるかについての復習として:

matplotlib.colors

Matplotlibは、色を指定するために次の形式を認識します。

  • 浮動小数点値のRGBまたはRGBAタプル[0, 1](例:(0.1, 0.2, 0.5)または(0.1, 0.2, 0.5, 0.3));
  • 16進数のRGBまたはRGBA文字列(例:'#0F0F0F'または'#0F0F0F0F');
  • [0, 1]グレイレベルを含む浮動小数点値の文字列表現(例:)'0.5';
  • のいずれか{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • X11 / CSS4カラー名。
  • xkcdカラー調査からの名前。接頭辞付き'xkcd:'(例:)'xkcd:sky blue';
  • その1つは{'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}、「T10」カテゴリカルパレット(デフォルトのカラーサイクル)のTableau Colorです。
  • 「CN」カラースペック、つまり「C」とそれに続く1桁の数字。これは、デフォルトのプロパティサイクル(matplotlib.rcParams['axes.prop_cycle'])へのインデックスです。インデックス作成はアーティストの作成時に行われ、サイクルに色が含まれていない場合はデフォルトで黒になります。

「CN」以外のすべての色の文字列指定では、大文字と小文字が区別されません。


軸を生成する一般的な方法が他にある場合は、お知らせください。
Nick T

この方法は過去3年間のある時点で姿を消したようです... MethodNotFound
Demis

@Demisこのメソッドは近年追加されました。古いバージョンでそれを行う方法については、ImportanceOfBeingEarnestの回答を参照してください。
Nick T

47

1つの方法は、スクリプト内で軸の背景色のデフォルトを手動で設定することです(matplotlibのカスタマイズを参照)。

import matplotlib.pyplot as plt
plt.rcParams['axes.facecolor'] = 'black'

これは、特定のaxesオブジェクトの背景色を変更するNick Tの方法とは対照的です。デフォルトをリセットすることは、同じようなスタイルで複数の異なるプロットを作成していて、異なるaxesオブジェクトを変更し続けたくない場合に便利です。

注:同等のもの

fig = plt.figure()
fig.patch.set_facecolor('black')

あなたの質問から:

plt.rcParams['figure.facecolor'] = 'black'

これは役に立ちます!fyiに依頼したところ、matplotlib.rcParams辞書を元のデフォルトに正しくリセットする
uhoh

41

このようなもの?axisbgキーワードを使用してsubplot

>>> from matplotlib.figure import Figure
>>> from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
>>> figure = Figure()
>>> canvas = FigureCanvas(figure)
>>> axes = figure.add_subplot(1, 1, 1, axisbg='red')
>>> axes.plot([1,2,3])
[<matplotlib.lines.Line2D object at 0x2827e50>]
>>> canvas.print_figure('red-bg.png')

(散布図ではなく、黒の背景ではありません。)

ここに画像の説明を入力してください


3
plt.subplot('111', axisbg='black')Windowsを使用して、プロットコマンドの前に成功しました。
heltonbiker 2014年

10
これらaxis_bg axis_bgcolorは、matplotlib 2.0.0で非推奨になり、matplotlib 2.2.0で削除されました
RubenLaguna 2018


12

他の回答で1つの提案を使用することですax.set_axis_bgcolor("red")。ただし、これは非推奨であり、MatPlotLib> = v2.0では機能しません。

使用するための提案もありますax.patch.set_facecolor("red")(MatPlotLib v1.5とv2.2の両方で動作します)。これは正常に機能しますが、v2.0以降のさらに簡単な解決策は、

ax.set_facecolor("red")


FYI、ax.set_axis_bgcolor("black")Pythonのv2.7.14 / MPL v1.5.1デベロッパーに動作しますが、ax.set_facecolor()しません。MPL v1.5.1とv2.2.0の間のどこかで、適切な機能が切り替えられました。
デミス2018年

1
@Demisすべてのバージョンで機能するソリューションが必要な場合は、を使用してくださいax.patch.set_facecolor("red")。推奨される方法でのmatplotlib 2.0のナットはax.set_facecolorです。
ImportanceOfBeingErnest

4

最も簡単なのは、プロットを作成するときに色を指定することです。

fig1 = plt.figure(facecolor=(1, 1, 1))

または

fig1, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, facecolor=(1, 1, 1))

これは、ウィンドウの背景色のみを変更し、実際のプロット色は変更しません
トムキューピス

1

より簡単な答え:

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