散布図
散布図を描いてみる。図1は、2018年6月4日の日本気象協会によるアメダスの各地の最高気温と最低気温のデータから作成したExcelデータである。
・
・
・
図1 Excelデータ(HLtemperCity.xlsx)
図1のデータは、1行目に変数名を設定していて、データ値は2行目以降に書かれている。1列目は各データの識別値(図1では地名、文字列でも通し番号でもよい)が書かれ、2列目と3列目に各データ対の値が設定されている。図1の形式のデータを読み込んで散布図を描くスクリプトをリスト1に示す。サンプルスクリプトファイルなどはまとめて圧縮ファイルfilesscatterplot_nfd.zipとしている。ダウンロード解凍すれば自由に利用できる。
リスト1のスクリプトを実行すると、入力データファイル名の設定が求められる(図2)。
図2
入力データファイル名を設定すると、次に、画像保存ファイル名の設定が求められる(図2)。図2では、ファイル名が「MyFigure.png」と設定されている。ファイル拡張子が「.png」であれば任意である。画像保存ファイル名を設定して「Enter」キーを押すと、データが読み込まれ、散布図が表示される(図3)。
図3
図3のウィンドウを閉じると、スクリプトの実行終了である(図4)。保存ファイルは、実行終了後、開くことができる。
図4
図3の散布図において、都市名も表示されていると分かりやすい。このラベル付きの散布図を描くスクリプトをリスト2に示す。
リスト2の実行方法は、リスト1の場合と同じである。リスト2の場合の散布図は図5のようになる。
図5
リスト1 散布描画スクリプト例(ScatterPlot.py)
import pandas as pd
import numpy
as np
import matplotlib.pyplot
as plt
finnm = input('入力データファイル(*.xlsx)= ')
foutnm = input('画像保存ファイル(*.png)= ')
#
# Excelファイルの読み込み
# モジュール xlrd がインストール済みであること
#
xlsx_fl = pd.ExcelFile(finnm)
# ExcelファイルからExcelFile型オブジェクトを生成
data_xlsx = pd.read_excel(xlsx_fl, header
= None) # ExcelFile型オブジェクトからDataFrame型オブジェクトを生成
data = data_xlsx.values
# Dataframe型オブジェクトからnumpyの配列オブジェクトを生成
print(data)
x_name = data[0, 1]
y_name = data[0, 2]
x_values = data[1:, 1]
y_values = data[1:, 2]
print(x_name)
print(x_values)
print(y_name)
print(y_values)
# 日本語表記の設定
plt.rcParams['font.family']
= ['Yu Gothic', 'Noto Sans CJK JP', 'Hiragino Maru Gothic Pro']
plt.figure(figsize =
(8, 7))
plt.xlabel(x_name, fontsize = 16)
plt.ylabel(y_name, fontsize = 16)
plt.plot(x_values, y_values, 'bo')
plt.savefig(foutnm)
print('\n保存ファイル:', foutnm,
'\n')
plt.show()
リスト2 散布図(ラベル付き)描画スクリプト例(ScatterPlotLabel.py)
import pandas as pd
import numpy
as np
import matplotlib.pyplot
as plt
finnm = input('入力データファイル(*.xlsx)= ')
foutnm = input('画像保存ファイル(*.png)= ')
#
# Excelファイルの読み込み
# モジュール xlrd がインストール済みであること
#
xlsx_fl = pd.ExcelFile(finnm)
# ExcelファイルからExcelFile型オブジェクトを生成
data_xlsx = pd.read_excel(xlsx_fl, header
= None) # ExcelFile型オブジェクトからDataFrame型オブジェクトを生成
data = data_xlsx.values
# Dataframe型オブジェクトからnumpyの配列オブジェクトを生成
print(data)
x_name = data[0, 1]
y_name = data[0, 2]
caseLabels = data[1:, 0]
x_values = data[1:, 1]
y_values = data[1:, 2]
print('Labels')
print(caseLabels)
print(x_name)
print(x_values)
print(y_name)
print(y_values)
# 日本語表記の設定
plt.rcParams['font.family']
= ['Yu Gothic', 'Noto Sans CJK JP', 'Hiragino Maru Gothic Pro']
plt.figure(figsize =
(10, 8))
plt.xlabel(x_name, fontsize = 16)
plt.ylabel(y_name, fontsize = 16)
#
# 点のプロット
#
plt.plot(x_values, y_values, 'bo', alpha = 0.6)
#
# 名前のプロット
#
for v_c, v_x, v_y in zip(caseLabels, x_values, y_values):
plt.text(v_x + 0.1, v_y + 0.1, v_c, color = 'b', fontsize = 12)
plt.savefig(foutnm)
plt.show()
print('\n保存ファイル:', foutnm,
'\n')