Matplotlibで1つのチャートに複数の水平棒グラフを描画する方法
Matplotlibを使えば、1つのチャート上に複数の水平棒グラフ(横棒グラフ)を簡単に重ねて描画できます。この記事では、barh() 関数と位置オフセットを活用して、複数系列のデータを1つのグラフにまとめて表示する手順を解説します。
実装の手順
pandas、matplotlib、numpy の各ライブラリをインポートします。
図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
水平棒の表示位置を格納する配列を作成します。
棒の幅を表す変数 width を初期化します。
barh()を使って水平棒グラフを作成します。2つ目の系列は位置に幅分のオフセットを加えることで、棒が重ならないように配置します。Y軸の目盛りと目盛りラベルを設定し、表示範囲(ylim)も指定します。
凡例をグラフの右上に配置します。
show()メソッドで図を表示します。
サンプルコード
import pandas import matplotlib.pyplot as plt import numpy as np # 図のサイズを設定 plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 水平棒の表示位置を格納する配列 ind = np.array([0, 1, 2]) # 棒の幅 width = 0.4 fig, ax = plt.subplots() # 水平棒グラフを描画(2系列) ax.barh(ind, np.array([4, 3, 5]), width, color='orange', label='N') ax.barh(ind + width, np.array([2, 5, 2]), width, color='blue', label='M') # Y軸の目盛りとラベルを設定 ax.set(yticks=ind + width, yticklabels=np.array(['A', 'B', 'C']), ylim=[2*width - 1, len(ind)]) # 凡例を右上に配置 ax.legend(loc='upper right') # グラフを表示 plt.show()
出力結果
このコードを実行すると、以下のようなグラフが出力されます。カテゴリA・B・Cごとに、オレンジ色の「N」と青色の「M」の2つの棒が並んで表示されます。

ポイントの解説
複数の水平棒を1つのチャートに描く際の重要なポイントは、位置のオフセットです。ind + width のように2つ目の系列のY座標に棒の幅を加算することで、棒同士が重なることなく隣接して配置されます。また、yticks を ind + width に設定することで、目盛りラベルが2本の棒の中間に来るよう調整しています。系列が3つ以上になる場合は、同様に width の倍数ずつオフセットを増やしていけば対応できます。
-
MatplotlibでNaN値を含むデータをプロット・操作する方法を解説
MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp
-
Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説
MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元