折れ線グラフ
図1は、日本気象協会による2018年6月5日の東京都千代田区の10日間最高気温予測値である。
図1 データファイル例temper10days.xlsx
図1では、1行目に変数名が書かれ、データ値は2行目以降に設定されている。1列目は折れ線において横軸で表されるデータ値であり、2列目に縦軸で表されるデータ値が設定されている。図1によると14日の予測最高気温は25℃である。
図1のデータを読み込んで、折れ線を描くスクリプト例を本ウェブサイト後半のリスト1に示す。スクリプトファイルとデータファイルは、圧縮ファイルfileslinegraph.zipにまとめている。ダウンロード解凍すれば自由に利用できる。リスト1のスクリプトを実行すると、入力ファイルデータ名の入力を求めるダイアログウィンドウが表示される(図2)。
図2
図2では、図1のデータファイル名「temper10days.xlsx」が設定されている。データファイル名の設定後、「開く」ボタンをクリックすると、次に図3のダイアログウィンドウが表示される。
図3
描画図形を保存するファイル名を設定する。ファイル名は、ファイル拡張子が「.png」であることを除いて任意である。図3では、「MyFig.png」と設定されている。ファイル名の設定後、「保存」ボタンをクリックすると、図4の描画ウィンドウが表示される。
図4
ウィンドウの右上のXアイコンをクリックして閉じると、プログラムの終了である。図4の描画図形は、図3で設定したファイル名のファイルに保存されている。
import tkinter
as tk
import tkinter.filedialog
as fd
import pandas as pd
import numpy
as np
import matplotlib.pyplot
as plt
def askinfilename(msg = None, types = [('', '*.*')]):
"""
入力用ファイル名の設定
"""
rt
= tk.Tk()
rt.withdraw()
flnm
= fd.askopenfilename(title = msg,
filetypes = types)
rt.destroy()
return flnm
def askoutfilename(msg = None, types = [('', '*.*')], deftype
= '.txt'):
"""
出力用ファイル名の設定
"""
rt
= tk.Tk()
rt.withdraw()
flnm
= fd.asksaveasfilename(title = msg,
filetypes = types,
defaultextension = deftype)
rt.destroy()
return flnm
finnm = askinfilename('入力データExcelファイル', types = [('Excel(*.xlsx)', '*.xlsx')])
foutnm = askoutfilename(msg = '画像保存ファイル', types = [('画像 (*.png)',
'*.png')],
deftype = '.png')
xlsx_fl = pd.ExcelFile(finnm)
data_xlsx = pd.read_excel(xlsx_fl, header
= None)
data = data_xlsx.values
x_name = data[0,0]
y_name = data[0, 1]
x_values = data[1:, 0]
y_values = data[1:, 1]
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, 5))
# 画像のサイズ
plt.plot(x_values, y_values, 'b')
# 折れ線の描画
x_labels = ['{}'.format(v) for v in x_values]
# 横軸の値表示文字列
plt.xticks(x_values, x_labels, fontsize = 12) # 横軸の目盛り
plt.xlabel(x_name, fontsize = 20)
# 横軸の変数名
plt.ylabel(y_name, fontsize = 20)
# 縦軸の変数名
plt.savefig(foutnm)
# 画像の保存
plt.show()
# 画像の表示