はじめに
matplotlibを使用して横軸が日付の棒グラフを作成する方法を説明します。例として、WebブラウザChromeの恐竜ゲームのスコアデータを用います。Chromeでchrome://dinoにアクセスすると、オフラインでもこのゲームを楽しむことができます。
データ
Date | Score |
2025-06-23 | 6448 |
2025-06-24 | 16365 |
2025-06-25 | 5221 |
2025-06-26 | 8915 |
2025-06-27 | 2215 |
2025-06-28 | 8476 |
2025-06-29 | 11638 |
コード

解説
モジュールのインポート
日付を目盛りのラベルとして表示し調整するには、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()を使用すると、日付ラベルを斜めに表示できます。これは日付が長く、ラベルが重なってしまう場合に特に効果的です。

コメント