やりたいことは:
1)「更新」のボダンをクリックして、二つY軸のグラフを表示します。左Y軸はaグラフで、右Y軸はb
グラフです。(Spinboxのデフォルトは「全部データ」です)
2)Spinboxにaを選んで、「更新」のボダンをクリックして、左Y軸でaグラフのみで、表示されます。
3)Spinboxにbを選んで、「更新」のボダンをクリックして、左Y軸でbグラフのみで、表示されます。
4)Spinboxに「全部データ」を選んで、「更新」のボダンをクリックして、二つY軸のグラフを表示します。左Y軸はaグラフで、右Y軸はbグラフです。( 1)の状態に戻ること )
しかし、4)番の操作には、思ったとおりにならなかったです。
恐らく、plt.cla()などの更新するときに、ax2.twinx()を消されました。
どうすればいいか?教えていただきたいです。よろしくお願いします。
Python
1from tkinter import * 2from tkinter import ttk 3from matplotlib import pyplot as plt 4from matplotlib.backends.backend_tkagg import ( 5 FigureCanvasTkAgg, NavigationToolbar2Tk) 6 7# プロットを更新する 8def plot_data(): 9 if data_ch_name.get() == "全部データ": 10 x = [1,2,3,4,5] 11 y1 = [21,11,31,41,21] 12 y2 = [0.3,0.15,0.31,4.1,2.1] 13 ax1.plot(x,y1,color='red') 14 ax2.plot(x,y2,color='blue') 15 ax1.set_ylabel("a",color='red') 16 ax2.set_ylabel("b",color='blue') 17 18 if data_ch_name.get() == "a": 19 ax1.cla() 20 ax2.cla() 21 ax2.axis("off") 22 x = [1,2,3,4,5] 23 y1 = [21,11,31,41,21] 24 ax1.plot(x,y1,color='red') 25 ax1.set_ylabel("a",color='red') 26 27 if data_ch_name.get() == "b": 28 ax1.cla() 29 ax2.cla() 30 ax2.axis("off") 31 x = [1,2,3,4,5] 32 y2 = [0.3,0.15,0.31,4.1,2.1] 33 ax1.plot(x,y2,color='blue') 34 ax1.set_ylabel("b",color='blue') 35 36def plot_wave(): 37 plot_data() 38 canvas.draw() 39 40# Windowの設定 41root = tkinter.Tk() 42root.title() 43root.geometry() 44data_name = ["全部データ","a","b"] 45 46# Frameの設定 47frame_btn = Frame(root, bd=4, relief=GROOVE) 48frame_repeat = Frame(root,bd=5, relief=GROOVE) 49frame_plot = Frame(root,bd=4, relief=GROOVE) 50 51# Buttonの設定 52btn_renew = Button(frame_btn, text='更新',fg='green',relief=GROOVE,command=plot_wave) 53 54# canvasの設定と描画 55fig = plt.Figure(facecolor="skyblue") 56ax1 = fig.add_subplot(111) 57ax2 = ax1.twinx() 58canvas = FigureCanvasTkAgg(fig, frame_plot) 59canvas.get_tk_widget().grid(row=0, column=0) 60canvas.draw() 61 62#widgetの配置 63frame_btn.grid(row=0, column=0) #in root 64frame_repeat.grid(row=1, column=0) #in root 65frame_plot.grid(row=2, column=0) #in root 66data_ch_name = StringVar() 67data_ch_name.set("全部データ") 68data_n_sp = ttk.Spinbox(frame_repeat, state = 'readonly', width=25, textvariable = data_ch_name, values = data_name) 69btn_renew.pack(fill = X) #in frame_btn 70data_n_sp.grid(row =0, column = 2,sticky=N) 71 72root.mainloop() #tkinterのwinを維持する。 73 74
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/22 02:46
2021/10/22 02:50 編集
2021/10/22 04:07
2021/10/22 04:14
2021/10/22 04:22
2021/10/22 04:55
2021/10/22 05:17