[matplotlib] 1.matplotlibで横軸日付の棒グラフ

matplotlib

はじめに

matplotlibを使用して横軸が日付の棒グラフを作成する方法を説明します。例として、WebブラウザChromeの恐竜ゲームのスコアデータを用います。Chromeでchrome://dinoにアクセスすると、オフラインでもこのゲームを楽しむことができます。

データ

DateScore
2025-06-236448
2025-06-2416365
2025-06-255221
2025-06-268915
2025-06-272215
2025-06-288476
2025-06-2911638

コード

コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)

解説

モジュールのインポート

日付を目盛りのラベルとして表示し調整するには、matplotlib.datesモジュールが必要です。

バージョン

データの読み込み

pd.read_html(url1, header=0)[0]でデータフレームを生成します。urlはこのページを指し、pd.read_htmlでウェブページ上のテーブルを取得できます。header=0は一番上の行をヘッダーとして指定します。read_htmlはテーブルのリストを返すため、[0]を使って最初のDataFrameを取り出しています。

データの読み込み(直接入力)

データを辞書形式で直接定義することも可能です。pd.DataFrame(data)を使用すると、この辞書データを分析に適したデータフレーム形式に簡単に変換できます。

データのnp.arrayへの変換

Dateの列をto_datetimeによりdatetime型に変換し、.valuesでnp.arrayに変換します。同様に、Scoreの列も.valuesを使用してnp.array形式に変換します。

棒グラフの表示

figureは図全体を表し、axはその内部の座標軸を意味します。figsize=(5,3)で横5インチ、縦3インチの図を作成します(1インチ=2.54 cm)。ax.bar(Date, Score)で横軸にDate、縦軸にScoreを適用した棒グラフを作成します。colorパラメータで棒の色をskyblueに設定し、edgecolorで棒の輪郭をnavyに設定しています。

mdatesのDateFormatter()で”%m/%d”を指定すると、表示形式は “月/日” になります。時間や分を含むデータの場合は”%m/%d %H:%M”とすれば、”月/日 時:分” の形式で表示されます。

このコードは、matplotlib の棒グラフに各棒の上部に数値ラベルを追加するためのものです。コードの内容を解説します:

  • for bar in bars: – 棒グラフのすべての棒(bars変数に格納されている)に対してループを実行します。
  • height = bar.get_height() – 現在処理中の棒の高さ(この場合はスコア値)を取得します。
  • ax.annotate() – グラフにテキスト注釈を追加するmatplotlibの関数です。
  • f'{height}’ – 表示するテキスト。ここでは棒の高さ(スコア値)をそのまま表示します。
  • xy=(bar.get_x() + bar.get_width() / 2, height) – 注釈を配置する位置を指定。各棒の中央上部に配置します。
  • xytext=(0, 3) – テキストのオフセット位置。ここでは棒の頂点から3ポイント上に配置します。
  • textcoords=”offset points” – オフセット単位を「ポイント」として指定します。
  • ha=’center’, va=’bottom’ – テキストの水平位置を中央、垂直位置を下端に揃えます。
  • fontsize=9 – フォントサイズを9ポイントに設定します。

このコードにより、サンプル実行結果で説明されているように「スコアの値が各棒の上に表示される」効果が得られます。これはデータの視認性を高める重要な要素の一つです。

日付を斜めにした棒グラフの表示

fig.autofmt_xdate()を使用すると、日付ラベルを斜めに表示できます。これは日付が長く、ラベルが重なってしまう場合に特に効果的です。

参考:

matplotlib.pyplot.bar — Matplotlib 3.10.5 documentation

コメント