質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

7990閲覧

Tkinterのウィンドウにmatplotlibで作成したグラフを表示したい

gymgym

総合スコア97

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2019/06/20 05:00

Python

1import sys, os 2import tkinter 3import matplotlib.pyplot as plt 4 5# レダーチャートを作る関数 6def plot_polar(labels, values, imgname): 7 angles = np.linspace(0, 2 * np.pi, len(labels) + 1, endpoint=True) 8 values = np.concatenate((values, [values[0]])) # 閉じた多角形にする 9 fig = plt.figure() 10 ax = fig.add_subplot(111, polar=True) 11 ax.plot(angles, values, 'o-') # 外枠 12 ax.fill(angles, values, alpha=0.25) # 塗りつぶし 13 ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels) # 軸ラベル 14 ax.set_rlim(0 ,max(values)) 15 #fig.savefig(imgname) 16 #plt.close(fig) 17 18# button2クリック時の処理 19def button_clicked(): 20 labels = [a, b, c, d, e, f] 21 values = [int(Box.get()), int(Box1.get()), int(Box2.get()), int(Box3.get()), int(Box4.get()), int(Box5.get())] 22 23 #グラフ描画 24 plot_polar(labels, values, "rader.png") 25 26if __name__ == "__main__": 27 # tkinter 設定 28 root = tkinter.Tk() 29 root.title(u"Software Title") 30 root.geometry("800x700") 31 32 #エントリー 33 Box = tkinter.Entry(width=50) 34 Box.insert(tkinter.END,"変数1") 35 Box.pack() 36 37 Box1 = tkinter.Entry(width=50) 38 Box1.insert(tkinter.END,"変数2") 39 Box1.pack() 40 41 Box2 = tkinter.Entry(width=50) 42 Box2.insert(tkinter.END,"変数3") 43 Box2.pack() 44 45 Box3 = tkinter.Entry(width=50) 46 Box3.insert(tkinter.END,"変数4") 47 Box3.pack() 48 49 Box4 = tkinter.Entry(width=50) 50 Box4.insert(tkinter.END,"変数5") 51 Box4.pack() 52 53 Box5 = tkinter.Entry(width=50) 54 Box5.insert(tkinter.END,"変数6") 55 Box5.pack() 56 57 #グラフ作成ボタン 58 Button = tkinter.Button(text=u'グラフ作成', width=50) 59 Button.bind("<Button-1>",button_clicked) 60 #左クリック(<Button-1>)されると,DeleteEntryValue関数を呼び出すようにバインド 61 Button.pack() 62

以上のように、変数を6つ分の値を入力して、入力した値でレーダーチャートを作成します。

作成したグラフをTkinterでつくったウィンドウ内に表示したいのですが、どのようにしたら良いでしょうか。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

FigureCanvasTkAgg() を利用して、tkのCanvas上にグラフを描画するとよいかと思います。

https://matplotlib.org/3.1.0/gallery/user_interfaces/embedding_in_tk_sgskip.html

Python

1""" 2import tkinter as tk 3import matplotlib.pyplot as plt 4from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 5import numpy as np 6 7labels = ['a', 'b', 'c', 'd', 'e', 'f'] 8 9def plot_polar(labels, values): 10 angles = np.linspace(0, 2 * np.pi, len(labels) + 1, endpoint=True) 11 values = np.concatenate((values, [values[0]])) # 閉じた多角形にする 12 ax.clear() 13 ax.plot(angles, values, 'o-') # 外枠 14 ax.fill(angles, values, alpha=0.25) # 塗りつぶし 15 ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels) # 軸ラベル 16 ax.set_rlim(0 ,max(values)) 17 18# button2クリック時の処理 19def button_clicked(event): 20 values = [int(b.get()) for b in [box0, box1, box2, box3, box4, box5]] 21 22 #グラフ描画 23 plot_polar(labels, values) 24 canvas.draw() 25 26if __name__ == "__main__": 27 # tkinter 設定 28 root = tk.Tk() 29 root.title(u"Software Title") 30 root.geometry("800x700") 31 32 #エントリー 33 fig = plt.Figure() 34 ax = fig.add_subplot(111, polar=True) 35 canvas = FigureCanvasTkAgg(fig, master=root) 36 canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) 37 38 box0 = tk.Entry(width=50) 39 box0.insert(tk.END,"0") 40 box0.pack(fill=tk.X, expand=1) 41 42 box1 = tk.Entry(width=50) 43 box1.insert(tk.END,"0") 44 box1.pack(fill=tk.X, expand=1) 45 46 box2 = tk.Entry(width=50) 47 box2.insert(tk.END,"0") 48 box2.pack(fill=tk.X, expand=1) 49 50 box3 = tk.Entry(width=50) 51 box3.insert(tk.END,"0") 52 box3.pack(fill=tk.X, expand=1) 53 54 box4 = tk.Entry(width=50) 55 box4.insert(tk.END,"0") 56 box4.pack(fill=tk.X, expand=1) 57 58 box5 = tk.Entry(width=50) 59 box5.insert(tk.END,"0") 60 box5.pack(fill=tk.X, expand=1) 61 62 #グラフ作成ボタン 63 button = tk.Button(root, text=u'グラフ作成', width=50) 64 button.bind("<Button-1>",button_clicked) 65 button.pack() 66 67 tk.mainloop()

イメージ説明

投稿2019/06/20 07:18

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

matplotlibでグラフを作成し、画像に書き出し、その画像を表示するように
するのが手っ取り早そうです。

投稿2019/06/20 07:18

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問