Pythonのmatplotlibで日付を表示させたいけどウマくいかない…
『横軸の日付が重なって潰れないようにするには?』
『Excelのように日付形式を変更できるの?』
こんな疑問に答えます。
【matplotlib】x軸を日付へ変換&フォーマット
Pythonにmatplotlibというグラフ描画ライブラリがあります。
グラフのX軸に日付データをセットして、
日付表示形式のフォーマットや、角度をつけたり出来ます。
x軸の型変換(文字列→日付)とフォーマット形式の変更手順
- CSVデータをPandasのdataflameに読み込ませる
- 日付の文字列を日付型へ変換する(x軸)
str型 => datetime型 変換
- 見やすい角度に調整する
plt.xticks(rotation=30) #横軸目盛りを30度傾ける
- 見やすい日付にフォーマットする
set_major_formatterとmatplotlibライブラリのmdatesを使用
CSVデータをPandasのdataflameに読み込ませる
厚生労働省のHPよりPCR検査実施人数CSVを入手して、Pandasのdataflameに読み込む処理です
/* Pandasをインポート */
import pandas as pd
# 厚生労働省のPCR検査実施人数
URL = "https://www.mhlw.go.jp/content/pcr_tested_daily.csv"
# PandasでCSV読み込み
df = pd.read_csv(URL)
df.tail()
キチンと取得したCSVをdfに読み込めてますね。
日付の文字列を日付型へ変換する
Pandasのdataflameに読み込んだPCR検査情報は全て文字列型です。
日付に見える項目も実際は文字列型になっています。
文字列型を日付型に変換し、matplotのpyplotで表示してみましょう。
#matplotlibのpyplotをインポート
import matplotlib.pyplot as plt
#横軸(x軸)に日付を設定
X = df.iloc[700:, 0] #データ量が多いため700行目以降
X_dt = pd.to_datetime(X)
#縦軸:PCR検査実施人数
Y = df.iloc[700:, 1] #データ量が多いため700行目以降
#グラフ作図
plt.plot(X_dt, Y)
plt.show()
はい。
一応、日付がでてますが潰れちゃってますね^^;
これを見栄え良くフォーマットしましょう。
Y軸の1e6となっているのは、10の6乘という意味です。
日付を見やすい角度に調整する
日付を見やすい角度に調整します。
plt.plot(X_dt, Y)
#横軸目盛りを30度傾ける
plt.xticks(rotation=30)
plt.show()
日付の潰れが解消されて、見やすい形になりました。
datetime型のプロットをするとデフォルトのyyyy-mm形式で表示されます。
少し長いですよね。
次は、日付の表示形式を変更です。
日付を見やすい表示形式にフォーマットする
今度は日付を見やすい表示形式にフォーマットしよう。
フォーマットとは書式という意味です。
日付の表示形式の変更は下記を使用します。
・set_major_formatter
・matplotlibライブラリのmdates
matplotlibでX軸の日付データをExcelのようにフォーマットで表示形式を変更することができます。
例を見ていきましょう。
plt.plot(X_dt, Y)
#横軸目盛りを30度傾ける
plt.xticks(rotation=30)
# 日付表示のフォーマット
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%y/%m"))
plt.show()
日付表示のフォーマットをyy/mm形式に変更できましたね。
%y…西暦 (下2桁) の 10進数(※%Yは4桁)
%m…0埋めした10進数の月(※%Mは分)
ちなみに、
%d…0埋めした10進数の日にち(※%Dはmm/dd/yy)
となります。
表示の調整は、まだまだ調査が必要かなぁ…
うーん。奥が深いPandasとmatplotlib。
頑張るぞー (^^;
とりあえず、今日はこれまで。
「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪
「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪
LINEでのお問合わせも受付中!
LINE公式アカウント
メッセージをお待ちしています!
- 応用情報技術者
- Oracle Master Gold
- Java SE Gold
- Java EE Webコンポーネントディベロッパ
- Python エンジニア認定データ分析
- 簿記2級