Python tkinter csvのデータをグラフ化して表示する

まくまく
まくまく
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 使い方まとめ

タイトルとURLをコピーしました