[matplotlib] 39. データの値に応じてプロットの色をかえる

matplotlib

はじめに

データの値に応じて散布図の色を変える方法について、茨城県つくば市の気温の変化を例として解説する。

コード

解説

データのダウンロード

気象庁のサイトから時間ごとの気温データをダウンロードする。

気象庁|過去の気象データ・ダウンロード
気象庁が提供するページです

モジュールのインポート

pd.read_csvによるデータの読み込み

skiprows=[0,1,2,3]で指定した行を読み込まずにスキップする。encoding=’shift_jis’で日本語の文字化けを防ぐ。 index_col=0で0列目をインデックスとし、header=0で0行目をカラム名とし、names=[‘temp’,’h’,’k’] でそのカラム名を変更している。読み込んだDataFrameは下記のようになる。

temphk
2019/8/7 1:00:0026.881
2019/8/7 2:00:0025.581
2019/8/7 3:00:0025.681
2019/8/7 4:00:0024.981
2019/8/7 5:00:0024.681
2019/8/7 6:00:0025.481
2019/8/7 7:00:0027.881
2019/8/7 8:00:0029.581
2019/8/7 9:00:0030.181
2019/8/7 10:00:0031.481
2019/8/7 11:00:0032.281
2019/8/7 12:00:0033.281
2019/8/7 13:00:0034.381
2019/8/7 14:00:0035.181
2019/8/7 15:00:0034.881
2019/8/7 16:00:0033.381
2019/8/7 17:00:0032.081
2019/8/7 18:00:0030.781
2019/8/7 19:00:0029.481
2019/8/7 20:00:0028.781
2019/8/7 21:00:0028.281
2019/8/7 22:00:0027.681
2019/8/7 23:00:0026.581
2019/8/8 00:00:0025.481
2019/8/8 1:00:0025.281
2019/8/8 2:00:0025.581
2019/8/8 3:00:0025.381
2019/8/8 4:00:0024.981
2019/8/8 5:00:0025.481
2019/8/8 6:00:0026.581
2019/8/8 7:00:0028.681
2019/8/8 8:00:0029.681
2019/8/8 9:00:0030.381
2019/8/8 10:00:0032.581
2019/8/8 11:00:0033.081
2019/8/8 12:00:0033.981
2019/8/8 13:00:0034.781
2019/8/8 14:00:0034.181
2019/8/8 15:00:0032.881
2019/8/8 16:00:0031.281
2019/8/8 17:00:0031.081
2019/8/8 18:00:0029.981
2019/8/8 19:00:0027.881
2019/8/8 20:00:0026.781
2019/8/8 21:00:0027.481
2019/8/8 22:00:0027.581
2019/8/8 23:00:0027.281
2019/8/9 00:00:0027.081

不要データの削除

df.drop()でデータを削除する。axis=1とすることで列方向のデータが削除できる。削除したデータは下記のようになる。

temp
2019/8/7 1:00:0026.8
2019/8/7 2:00:0025.5
2019/8/7 3:00:0025.6
2019/8/7 4:00:0024.9
2019/8/7 5:00:0024.6
2019/8/7 6:00:0025.4
2019/8/7 7:00:0027.8
2019/8/7 8:00:0029.5
2019/8/7 9:00:0030.1
2019/8/7 10:00:0031.4
2019/8/7 11:00:0032.2
2019/8/7 12:00:0033.2
2019/8/7 13:00:0034.3
2019/8/7 14:00:0035.1
2019/8/7 15:00:0034.8
2019/8/7 16:00:0033.3
2019/8/7 17:00:0032.0
2019/8/7 18:00:0030.7
2019/8/7 19:00:0029.4
2019/8/7 20:00:0028.7
2019/8/7 21:00:0028.2
2019/8/7 22:00:0027.6
2019/8/7 23:00:0026.5
2019/8/8 00:00:0025.4
2019/8/8 1:00:0025.2
2019/8/8 2:00:0025.5
2019/8/8 3:00:0025.3
2019/8/8 4:00:0024.9
2019/8/8 5:00:0025.4
2019/8/8 6:00:0026.5
2019/8/8 7:00:0028.6
2019/8/8 8:00:0029.6
2019/8/8 9:00:0030.3
2019/8/8 10:00:0032.5
2019/8/8 11:00:0033.0
2019/8/8 12:00:0033.9
2019/8/8 13:00:0034.7
2019/8/8 14:00:0034.1
2019/8/8 15:00:0032.8
2019/8/8 16:00:0031.2
2019/8/8 17:00:0031.0
2019/8/8 18:00:0029.9
2019/8/8 19:00:0027.8
2019/8/8 20:00:0026.7
2019/8/8 21:00:0027.4
2019/8/8 22:00:0027.5
2019/8/8 23:00:0027.2
2019/8/9 00:00:0027.0

インデックスのデータ形式の変更

現在のIndexのデータタイプは、dtype(‘O’)となる。これはObjectのOとなっている。これをpd.to_datetime()によりデータタイプをdatetime形式に変換する。データタイプはdtype(‘<M8[ns]’)となる。

データを配列として取り出す

インデックスはdf.index.valuesで、DataFrameの要素はdf.iloc[:,0].valuesのようにilocで通常の配列と同じスライスができる方法でやるとわかりやすい。

各プロットデータの生成

30℃以上のデータと30℃未満のデータを、日時と気温を対応させて、それぞれ生成する。

図の表示

30℃以上と未満の各データを色を変えて、散布図でプロットする。
ax.xaxis.set_major_formatter(mdates.DateFormatter(‘%m-%d %H:00’))により、x軸の表示形式を月ー日 時間:00にする。
fig.autofmt_xdate()でx軸ラベルが重ならないように回転した状態で表示される。

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

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

参考

Contourf and log color scale — Matplotlib 3.1.0 documentation
https://matplotlib.org/examples/pylab_examples/pcolor_log.html
コードをダウンロード

コメント