
まくまく
tkinterで作成したウインドウにグラフを表示してみようと思います。データはcsvファイルから読み込みます。
まずはcsvファイルを読み込んで、その値をデータフレームに格納します。そしてPandasのメソッドであるplotを利用しグラフ化。それをGUIアプリ作成ライブラリtkinterのウインドウで表示します。
使用するcsvファイル
今回はこのcsvファイルを使用しようと思います。以前の記事で使用したデジタルカメラの出荷台数データです。
A列に年度、B列に出荷台数が入力されていま。1行目、2行目は無視して、3行目以降を指定する必要があります。
出力
tkinterで表示するとこんな感じです。ルートウインドウの中にフレームを作成、さらにその中にキャンバスを作成してグラフを表示しています。
グラフのサイズは、figsizeで指定しています。あと、目盛ラベルが切れるのでfig.subplots_adjustで調整しました。
ラインチャートだとこんな感じです。
こちらは面グラフ。
使用できるグラフの種類
•折れ線グラフ(line plot)
•棒グラフ(bar plot)
•箱ひげ図(box plot)
•ヒストグラム(histogram)
•カーネル密度推定(Kernel Density Estimation plot)
•面グラフ(area plot)
•散布図(scatter plot)
•六角形ビニング図(hexbin plot)
サンプルプログラム
#ライブラリのインポート
import tkinter as tk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
#ウインドウの作成
root = tk.Tk()
#ウインドウのタイトル
root.title("tkinter グラフを表示")
#ウインドウサイズと位置指定 幅,高さ,x座標,y座標
root.geometry("800x500+50+50")
#フレームの作成
frame = tk.Frame(root, width=780, height=480, padx=10, pady=10,bg="#D9D9D9")
frame.place(x=10, y=10)
#csvファイルを読み込みグラフ化
df = pd.read_csv('camera.csv',header=2,usecols=[0,1])
ax = df.plot.line(x='(年)',y='出荷台数(千台)', figsize=(10,6),fontsize=18, legend=False)
fig = ax.get_figure()
fig.subplots_adjust(left=0.15, bottom=0.2)
plt.xlabel("year",fontsize=18)
plt.ylabel("shipment (thousands)",fontsize=18)
plt.title("Digital Camera Shipments", fontsize=22)
plt.grid(True)
plt.ylim(0, 140000)
#小数点桁表示
#plt.gca().xaxis.set_major_formatter(plt.FormatStrFormatter('%.0f'))
#グラフをpngで保存
#plt.savefig("camera_shipment_bar.png")
#キャンバスの作成
canvas = FigureCanvasTkAgg(fig, frame)
canvas.get_tk_widget().pack()
#イベントループ
root.mainloop()
Python tkinterについてはこちらの記事でまとめています。>>>Python tkinter 使い方まとめ