円グラフ
犬、猫、鳥の中から一番飼いたいペットを29人の人に聞いたところ、図1に示す結果が得られたとする。データがカテゴリごとの度数で与えられている場合は、本ウェブサイトの後半で説明する。
・
・
・
図1 Excelデータファイル(Individual.xlsx)
第1列目に個人の識別用変数Personの値(数値でも文字列でもよい)、第2列目に選ばれたペットが設定されている。第1行目には変数名が書かれているので、データは2行目からである。
図1の形式のExcelデータファイルを読み込んで円グラフを描くスクリプトをウェブサイト後半のリスト1に示す。スクリプトファイルとデータファイルは圧縮ファイルfilespiechart.zipにまとめたので、ダウンロード解凍すれば自由に利用できる。リスト1のスクリプトを実行すると、図2のダイアログウィンドウが表示される。
図2
図1のファイル名Individual.xlsxを設定して、「開く」ボタンをクリックすると、図3のダイアログウィンドウが表示される。
図3
円グラフの描かれた画像を保存するファイル名を、ファイル拡張子が「.png」である適当な名前で設定する。図3では「MyFigure1.png」と設定されている。ファイル名を設定して「保存」ボタンをクリックすると、図4の円グラフが表示される。
図4
リスト1 図1の形式のデータから円グラフを描くスクリプト(PieInd.py)
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
var_name = data[0,1]
values = data[1:].T[1]
Categ, counts = np.unique(values,
return_counts = True)
print(Categ)
print(counts)
# 日本語表記の設定
plt.rcParams['font.family']
= ['Yu Gothic', 'Noto Sans CJK JP', 'Hiragino Maru Gothic Pro']
#
円グラフの表示
def func(pct):
return '{0:.1f}%'.format(pct)
plt.pie(counts, labels = Categ,
labeldistance = None, autopct
= lambda pct: func(pct))
plt.title(var_name, fontsize = 20) # タイトルの表示
plt.legend()
# レジェンドの表示
plt.savefig(foutnm)
# 画像の保存
plt.show()
# 画像の表示
図1のデータが図5のようにカテゴリごとの度数で与えられているとする。
図5 ExcelデータファイルPooled.xlsx
図5では、1行目の1列目に変数名Petが書かれている。2行目にカテゴリ名、3行目にカテゴリの度数が設定されている。この形式のデータを入力ファイルとするスクリプトを本ウェブサイト後半のリスト2に示す。スクリプトファイルとデータファイルは圧縮ファイルfilespiechart.zipにまとめたので、ダウンロード解凍すれば自由に利用できる。
リスト2のスクリプトを実行すると図6のダイアログウィンドウが表示される。
図6
図5のファイル名を設定して、「開く」ボタンをクリックすると、図7のダイアログウィンドウが表示される。
図7
円グラフの画像ファイルを保存するファイル名を、ファイル拡張子が「.png」である任意の名前で設定する。既にあるファイル名を設定すると上書き保存になる。
保存ファイル名を設定して「保存」ボタンをクリックすると、図8の円グラフが表示される。
図8
リスト2 度数がカテゴリごとに集計されたデータの円グラフ描画スクリプト(PiePooled.py)
import tkinter as tk
import tkinter.filedialog
as fd
import pandas as pd
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
VarName = data[0][0]
Categ = data[1]
counts = data[2]
# 日本語表記の設定
plt.rcParams['font.family']
= ['Yu Gothic', 'Noto Sans CJK JP', 'Hiragino Maru Gothic Pro']
#
円グラフの表示
def func(pct):
return '{0:.1f}%'.format(pct)
plt.pie(counts, labels = Categ,
labeldistance = None, autopct
= lambda pct: func(pct))
plt.title(VarName, fontsize = 20)
# タイトルの表示
plt.legend()
# レジェンドの表示
plt.savefig(foutnm)
# 画像の保存
plt.show()
# 画像の表示