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

Matplotlibで棒グラフと折れ線グラフを同じプロットに重ねて表示する方法

データ分析や可視化の現場では、棒グラフと折れ線グラフを1つの図に重ねて表示したい場面がよくあります。Matplotlibでは、PandasのDataFrameと組み合わせることで、このような複合グラフを簡単に作成できます。

この記事では、同じプロット上に棒グラフと折れ線グラフを表示する具体的な手順を解説します。

実装の手順

  • 図のサイズと余白を設定する — figureサイズを指定し、サブプロット間・周囲のパディングを調整します。
  • 2次元の表形式データを作成する — サイズ変更可能な、PandasのDataFrameを用意します。
  • Figureとサブプロットを作成するplt.subplots()で図と軸を生成します。
  • 棒グラフと折れ線グラフを描画する — 手順2で作成したDataFrameを使って、それぞれのグラフを同じ軸にプロットします。
  • 図を表示するshow()メソッドで結果を出力します。

コード例

import pandas as pd
import matplotlib.pyplot as plt

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

# データを持つDataFrameを作成
df = pd.DataFrame(dict(data=[2, 4, 1, 5, 9, 6, 0, 7]))
fig, ax = plt.subplots()

# 棒グラフ(赤)を描画
df['data'].plot(kind='bar', color='red')

# 同じデータで折れ線グラフ(黒、星形マーカー付き)を重ねて描画
df['data'].plot(kind='line', marker='*', color='black', ms=10)

plt.show()

実行結果

Matplotlibで棒グラフと折れ線グラフを同じプロットに重ねて表示する方法

ポイント解説

このコードの重要なポイントは、同じDataFrameに対してplot()を2回呼び出していることです。1回目はkind='bar'で棒グラフを、2回目はkind='line'で折れ線グラフを描画しています。Matplotlibはデフォルトで同じFigureに描画を重ねるため、特別な設定なしに複合グラフが完成します。

また、marker='*'ms=10を指定することで、折れ線の各データ点に大きな星形マーカーが表示され、値の位置がひと目でわかるようになります。色も棒グラフは赤(color='red')、折れ線は黒(color='black')として視認性を高めています。

この手法は、売上の推移(棒グラフ)と成長率(折れ線グラフ)のように、異なる種類のデータを同じ図で比較したい場合に特に有効です。ぜひ実際のデータ分析に活用してみてください。

  1. Matplotlibのループプロットでマーカーとラインに同じ色を設定する方法

    Matplotlibでループ処理により複数のデータ系列を描画する際、「マーカー」と「ライン」に同じ色を割り当てたい場面はよくあります。本記事では、そのための基本的な手順と、色を確実に揃えるための実践的な方法をコード例とともに解説します。 基本の手順 numpy を使用して m、n、x のデータポイントを初期化します。 figure() メソッドで新しい図を作成、または既存の図をアクティブ化します。 clf() メソッドで図をクリアします。 subplot() メソッドで現在の図にサブプロットを追加します。 itertools.cycle を利用して、複数種類のマーカーを順番に取得できるよう

  2. Matplotlibでヒストグラムデータから折れ線グラフを描画する方法

    Matplotlibでヒストグラムのデータをもとに折れ線グラフを描画するには、NumPyのhistogram()メソッドを使ってデータセットのヒストグラムを事前に計算しておくのが便利です。この記事では、同じデータをヒストグラムと折れ線グラフの両方で可視化する手順を解説します。実装の手順現在の図にサブプロットを追加します。nrows=2、ncols=1とし、index=1を指定します。NumPyのhistogram()メソッドを使用して、データセットのヒストグラム(度数とビンの境界値)を取得します。edgecolor=blackを指定してhist()メソッドでヒストグラムを描画します。インデック