[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は下記のようになる。

temp h k
2019/8/7 1:00:00 26.8 8 1
2019/8/7 2:00:00 25.5 8 1
2019/8/7 3:00:00 25.6 8 1
2019/8/7 4:00:00 24.9 8 1
2019/8/7 5:00:00 24.6 8 1
2019/8/7 6:00:00 25.4 8 1
2019/8/7 7:00:00 27.8 8 1
2019/8/7 8:00:00 29.5 8 1
2019/8/7 9:00:00 30.1 8 1
2019/8/7 10:00:00 31.4 8 1
2019/8/7 11:00:00 32.2 8 1
2019/8/7 12:00:00 33.2 8 1
2019/8/7 13:00:00 34.3 8 1
2019/8/7 14:00:00 35.1 8 1
2019/8/7 15:00:00 34.8 8 1
2019/8/7 16:00:00 33.3 8 1
2019/8/7 17:00:00 32.0 8 1
2019/8/7 18:00:00 30.7 8 1
2019/8/7 19:00:00 29.4 8 1
2019/8/7 20:00:00 28.7 8 1
2019/8/7 21:00:00 28.2 8 1
2019/8/7 22:00:00 27.6 8 1
2019/8/7 23:00:00 26.5 8 1
2019/8/8 00:00:00 25.4 8 1
2019/8/8 1:00:00 25.2 8 1
2019/8/8 2:00:00 25.5 8 1
2019/8/8 3:00:00 25.3 8 1
2019/8/8 4:00:00 24.9 8 1
2019/8/8 5:00:00 25.4 8 1
2019/8/8 6:00:00 26.5 8 1
2019/8/8 7:00:00 28.6 8 1
2019/8/8 8:00:00 29.6 8 1
2019/8/8 9:00:00 30.3 8 1
2019/8/8 10:00:00 32.5 8 1
2019/8/8 11:00:00 33.0 8 1
2019/8/8 12:00:00 33.9 8 1
2019/8/8 13:00:00 34.7 8 1
2019/8/8 14:00:00 34.1 8 1
2019/8/8 15:00:00 32.8 8 1
2019/8/8 16:00:00 31.2 8 1
2019/8/8 17:00:00 31.0 8 1
2019/8/8 18:00:00 29.9 8 1
2019/8/8 19:00:00 27.8 8 1
2019/8/8 20:00:00 26.7 8 1
2019/8/8 21:00:00 27.4 8 1
2019/8/8 22:00:00 27.5 8 1
2019/8/8 23:00:00 27.2 8 1
2019/8/9 00:00:00 27.0 8 1

不要データの削除

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

temp
2019/8/7 1:00:00 26.8
2019/8/7 2:00:00 25.5
2019/8/7 3:00:00 25.6
2019/8/7 4:00:00 24.9
2019/8/7 5:00:00 24.6
2019/8/7 6:00:00 25.4
2019/8/7 7:00:00 27.8
2019/8/7 8:00:00 29.5
2019/8/7 9:00:00 30.1
2019/8/7 10:00:00 31.4
2019/8/7 11:00:00 32.2
2019/8/7 12:00:00 33.2
2019/8/7 13:00:00 34.3
2019/8/7 14:00:00 35.1
2019/8/7 15:00:00 34.8
2019/8/7 16:00:00 33.3
2019/8/7 17:00:00 32.0
2019/8/7 18:00:00 30.7
2019/8/7 19:00:00 29.4
2019/8/7 20:00:00 28.7
2019/8/7 21:00:00 28.2
2019/8/7 22:00:00 27.6
2019/8/7 23:00:00 26.5
2019/8/8 00:00:00 25.4
2019/8/8 1:00:00 25.2
2019/8/8 2:00:00 25.5
2019/8/8 3:00:00 25.3
2019/8/8 4:00:00 24.9
2019/8/8 5:00:00 25.4
2019/8/8 6:00:00 26.5
2019/8/8 7:00:00 28.6
2019/8/8 8:00:00 29.6
2019/8/8 9:00:00 30.3
2019/8/8 10:00:00 32.5
2019/8/8 11:00:00 33.0
2019/8/8 12:00:00 33.9
2019/8/8 13:00:00 34.7
2019/8/8 14:00:00 34.1
2019/8/8 15:00:00 32.8
2019/8/8 16:00:00 31.2
2019/8/8 17:00:00 31.0
2019/8/8 18:00:00 29.9
2019/8/8 19:00:00 27.8
2019/8/8 20:00:00 26.7
2019/8/8 21:00:00 27.4
2019/8/8 22:00:00 27.5
2019/8/8 23:00:00 27.2
2019/8/9 00:00:00 27.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
pylab_examples example code: pcolor_log.py — Matplotlib 2.0.2 documentation
コードをダウンロード

コメント