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

Python Matplotlibで複数のサブプロット全体にグリッド線を描画する方法

PythonのMatplotlibで、複数のサブプロット(グラフ領域)をまたいでグリッド線を表示したい場合があります。そのようなときは、背景用のサブプロットを別途作成し、その軸の枠線(スパイン)や目盛りラベルを非表示にすることで、全体に共通のグリッドを実現できます。

実装の手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • subplots()メソッドを使って、図と複数のサブプロットを作成します。
  • add_subplot()で現在の図に新しいサブプロットを追加し、そのスパイン(枠線)の表示をオフにします。
  • 追加した軸(ax3)の目盛りラベルと目盛り線を非表示にします。
  • X軸を他のサブプロットと共有するように設定します。
  • ax1・ax2・ax3それぞれに対してグリッド線の表示を設定します。
  • show()メソッドで図を画面に表示します。

コード例

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax3 = fig.add_subplot(111, zorder=-1)

for _, spine in ax3.spines.items():
    spine.set_visible(False)

ax3.tick_params(labelleft=False, labelbottom=False, left=False, right=False)
ax3.get_shared_x_axes().join(ax3, ax1)
ax3.grid(axis="x")

ax1.grid()
ax2.grid()

plt.show()

ポイント解説

このコードの重要なポイントは以下の通りです。

  • zorder=-1を指定することで、ax3が他のサブプロットより背面に配置され、グリッドがグラフの背後に表示されます。
  • spine.set_visible(False)により、ax3の上下左右の枠線をすべて非表示にしています。
  • tick_params()でラベルと目盛りを消すことで、ax3自体は見えず、グリッド線だけが残ります。
  • get_shared_x_axes().join()によってX軸の範囲をax1と共有し、グリッドの位置が上段・下段のグラフと揃うようにしています。

出力結果

このコードを実行すると、2つのサブプロットの背後にX方向のグリッド線が共通して描画された図が表示されます。各グラフのデータ位置とグリッドがきれいに揃うため、複数のグラフを比較するときに非常に便利です。

  1. PythonのMatplotlibで球の表面に点をプロットする方法

    Pythonで球の表面に点をプロットしたい場合、Matplotlibのplot_surface()メソッドを利用すると簡単に実現できます。この記事では、3D球面を描画し、その上にデータポイントを表示する手順を具体的なコード例とともに解説します。実装の手順figure()メソッドを使って、新しい図を作成するか、既存の図をアクティブにします。add_subplot()メソッドにprojection=3dを指定して、3D投影のサブプロットを追加します。球の半径を表す変数rを初期化します。NumPyを使用して、球面上のtheta(θ)の値と、x・y・z各軸のデータポイントを算出します。plot_sur

  2. PythonのMatplotlibでX軸に日付をプロットする方法

    Pythonで時系列データを可視化する際、X軸に日付を表示したいケースはよくあります。PandasとMatplotlibを組み合わせれば、日付をインデックスとしたデータフレームを作成し、gcf().autofmt_xdate()を使うことでX軸の日付表示を自動的に整形できます。実装の手順日付文字列のリストを作成し、pd.to_datetime()を使ってdatetime型に変換します。プロットするデータとして data = [1, 2, 3] を用意します。DataFrame() オブジェクト(ここではDF)を生成します。DFの value 列に手順2のデータを設定します。手順1で作成したda