[matplotlib] 39. データ値に基づく色分けプロット技法

matplotlib

はじめに

この記事では、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℃以上と未満のデータを異なる色で区別してプロットします。

x軸の表示形式は、ax.xaxis.set_major_formatter(mdates.DateFormatter(‘%m-%d %H:00’))を使用して「月-日 時間: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

コメント