對于每個“代碼”,我需要顯示一個圖,該圖在垂直軸上有四個“vPoint”,在水平軸上有四個“步長”。所以我需要創建一個查看器/GUI,允許用戶在每行的圖之間切換。

我創建了一個 for 回圈:
for ind in dataOK.index:
r1=dataOK['vPoint1_R4'][ind]
r2=dataOK['vPoint2_R4'][ind]
r3=dataOK['vPoint3_R4'][ind]
r4=dataOK['vPoint4_R4'][ind]
t_step=[15,30,45,60]
vpoints=[r1,r2,r3,r4]
plt.scatter(t_step,vpoints)
plt.plot(t_step, vpoints)
plt.title(ind)
plt.show()
但是在回圈外使用 plt.show() 它會創建一個獨特的圖,其中所有圖都合并了(下圖)。有沒有辦法在 python 中實作一個基于按鈕的 GUI,每次點擊時使用這個 for 回圈來顯示下一個圖?
uj5u.com熱心網友回復:
Matplotlib 本身已經提供了一個很棒的Button Example。基于它,您可能正在尋找類似的東西:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import random
def getData(ind):
return dataOK['index'][ind], dataOK['vPoint1_R4'][ind], dataOK['vPoint2_R4'][ind], dataOK['vPoint3_R4'][ind], dataOK['vPoint4_R4'][ind]
dataOK = {
'index': list(range(0,12)),
'vPoint1_R4': random.sample(range(0, 600), 12),
'vPoint2_R4': random.sample(range(0, 600), 12),
'vPoint3_R4': random.sample(range(0, 600), 12),
'vPoint4_R4': random.sample(range(0, 600), 12),
}
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2) #leave space for buttons
ax.set_ylim([0, 600])
ind, r1, r2, r3, r4 = getData(0)
t_step = [15, 30, 45, 60]
vpoints = [r1, r2, r3, r4]
l, = plt.plot(t_step, vpoints, '-o')
pltTitle = plt.title(ind)
class Index:
selectedIndex = 0
def updatePlot(self):
i = self.selectedIndex % len(dataOK['index'])
currentIndex = dataOK['index'][i]
ind, r1, r2, r3, r4 = getData(currentIndex)
l.set_ydata([r1, r2, r3, r4])
pltTitle.set_text(ind)
plt.draw()
def next(self, event):
self.selectedIndex = 1
self.updatePlot()
def prev(self, event):
self.selectedIndex -= 1
self.updatePlot()
callback = Index()
axprev = fig.add_axes([0.7, 0.05, 0.1, 0.075])
axnext = fig.add_axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/512409.html
