Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】Matplotlibで棒グラフの色を自動的に循環させる方法

Matplotlibで棒グラフ(バープロット)を作成する際、各系列に異なる色を手動で指定するのは面倒です。そこで便利なのが、色を自動的に循環させる機能です。この記事では、prop_cycleを使って棒グラフの色を自動的に切り替える方法を解説します。

実装の手順

  • figureサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • plt.cycler()を使って、異なる色の自動サイクラー(カラーサイクル)を設定します。
  • 棒グラフを描画するためのPandasデータフレームを作成します。
  • plot()メソッドにkind="bar"を指定して、棒グラフを描画します。
  • show()メソッドで図を表示します。

サンプルコード

import matplotlib.pyplot as plt
import pandas as pd

# 図のサイズとレイアウトの設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 色の自動サイクルを設定(赤・緑・青・黄)
plt.rc('axes', prop_cycle=(plt.cycler('color', ['r', 'g', 'b', 'y'])))

# サンプルデータの作成
df = pd.DataFrame(dict(name=["John", "Jacks", "James"], age=[23, 20, 26],
marks=[88, 90, 76], salary=[90, 89, 98]))

# 棒グラフとして描画
df.set_index('name').plot(kind='bar')

plt.show()

コードのポイント

このコードの重要な部分は以下の行です。

plt.rc('axes', prop_cycle=(plt.cycler('color', ['r', 'g', 'b', 'y'])))

plt.cycler('color', [...])で色のリストからサイクラーを作成し、plt.rc('axes', prop_cycle=...)で軸(axes)のデフォルトのカラーサイクルとして登録しています。これにより、以降に描画されるすべてのプロットで、指定した色が順番に自動的に適用されます。

また、df.set_index('name')で「name」列をインデックスに設定することで、X軸に人物名が表示され、「age」「marks」「salary」の3つの系列がそれぞれ異なる色の棒グラフとして描画されます。

出力結果

上記のコードを実行すると、John・Jacks・Jamesの3人ごとに、年齢・点数・給与の3つのデータ系列が、赤・緑・青・黄のカラーサイクルに従って自動的に色分けされた棒グラフが表示されます。新しい系列が追加されても、自動的に次の色が割り当てられるため、色指定の手間が省けます。

  1. Pythonのmatplotlibで1つのページに複数のプロットを作成する方法

    Pandasとmatplotlibを組み合わせることで、データフレームから図(figure)と軸(axis)を簡単に作成し、scatterメソッドを使って点をプロットできます。ここでは、学生の人数と取得点数の関係を散布図として可視化する手順を紹介します。 実装の手順 学生のリスト、各学生が取得した点数のリスト、スコアごとの色分け用リストを作成します。 PandasのDataFrameを使って、手順1のデータからデータフレームを作成します。 subplotsメソッドでfigとax変数を作成します。デフォルトでは行数(nrows)と列数(ncols)はどちらも1に設定されています。 plt.xl

  2. Pythonで2つのプロットを並べて作成する方法【matplotlibのsubplot活用】

    matplotlibのsubplot(row, col, index)メソッドを使うと、1つの図(figure)を行数×列数の領域に分割し、指定したインデックスの位置にそれぞれグラフを描画できます。本記事では、このメソッドを利用して、1つの図の中に2つのグラフを横並びで作成する方法を解説します。 実装の手順 numpyを使って、x座標と2種類のy座標(y1、y2)のデータポイントを作成します。 nrows=1、ncols=2、index=1を指定してsubplot()メソッドを呼び出し、現在のfigureに最初のサブプロットを追加します。 plot()メソッドで、xとy1のデータを使って折れ