0
我試圖在選擇新數據時使PYQT嵌入Matplotlib繪圖重繪。它完美地繪製出第一批地塊。我嘗試了許多我在網上看到的東西的變體,但無濟於事。任何幫助深表感謝。如何刷新PYQT4中嵌入的MatPlotlib?
DEF mpl_plot(個體,plot_page,重製= 0):#DATA存儲在列表
if plot_page == 1: #Plot 1st Page
plt = self.mplwidget.axes
fig = self.mplwidget.figure #Add a figure
if plot_page == 2: #Plot 2nd Page
plt = self.mplwidget_2.axes
fig = self.mplwidget_2.figure #Add a figure
if plot_page == 3: #Plot 3rd Page
plt = self.mplwidget_3.axes
fig = self.mplwidget_3.figure #Add a figure
par1 = fig.add_subplot(1,1,1)
par2 = fig.add_subplot(1,1,1)
#Add Axes
ax1 = par1.twinx()
ax2 = par2.twinx()
ax2.spines["right"].set_position(("outward", 25))
self.make_patch_spines_invisible(ax2)
ax2.spines["right"].set_visible(True)
impeller = str(self.comboBox_impellers.currentText()) #Get Impeller
fac_curves = self.mpl_factory_specs(impeller)
fac_lift = fac_curves[0]
fac_power = fac_curves[1]
fac_flow = fac_curves[2]
fac_eff = fac_curves[3]
fac_max_eff = fac_curves[4]
fac_max_eff_bpd = fac_curves[5]
fac_ranges = self.mpl_factory_ranges()
min_range = fac_ranges[0]
max_range = fac_ranges[1]
#Plot Chart
plt.hold(True) #Has to be included for multiple curves
plt.plot(fac_flow, fac_lift, 'b', linestyle = "dashed", linewidth = 1)
#plt.plot(flow,f_lift,'b.') #Plot datapoints only
#Plot Factory Power
ax1.plot(fac_flow, fac_power, 'r', linestyle = "dashed", linewidth = 1)
#ax1.plot(flow,f_power,'r.') #Plot datapoints only
ax2.plot(fac_flow, fac_eff, 'g', linestyle = "dashed", linewidth = 1)
#Plot x axis minor tick marks
minorLocatorx = AutoMinorLocator()
ax1.xaxis.set_minor_locator(minorLocatorx)
ax1.tick_params(which='both', width= 0.5)
ax1.tick_params(which='major', length=7)
ax1.tick_params(which='minor', length=4, color='k')
#Plot y axis minor tick marks
minorLocatory = AutoMinorLocator()
plt.yaxis.set_minor_locator(minorLocatory)
plt.tick_params(which='both', width= 0.5)
plt.tick_params(which='major', length=7)
plt.tick_params(which='minor', length=4, color='k')
#Make Border of Chart White
#Plot Grid
plt.grid(b=True, which='both', color='k', linestyle='-')
#set shaded Area
plt.axvspan(min_range, max_range, facecolor='#9BE2FA', alpha=0.5) #Yellow rectangular shaded area
#Set Vertical Lines
plt.axvline(fac_max_eff_bpd, color = '#69767A')
bep = fac_max_eff * 0.90
bep_corrected = bep * 0.90
ax2.annotate('BEP', xy=(fac_max_eff_bpd, bep_corrected), xycoords='data',
xytext=(-50, 30), textcoords='offset points',
bbox=dict(boxstyle="round", fc="0.8"),
arrowprops=dict(arrowstyle="-|>",
shrinkA=0, shrinkB=10,
connectionstyle="angle,angleA=0,angleB=90,rad=10"),
)
#Set Scales
plt.set_ylim(0,max(fac_lift) + (max(fac_lift) * 0.40)) #Pressure
#plt.set_xlim(0,max(fac_flow))
ax1.set_ylim(0,max(fac_power) + (max(fac_power) * 0.40)) #Power
ax2.set_ylim(0,max(fac_eff) + (max(fac_eff) * 0.40)) #Effiency
# Set Axes Colors
plt.tick_params(axis='y', colors='b')
ax1.tick_params(axis='y', colors='r')
ax2.tick_params(axis='y', colors='g')
# Set Chart Labels
plt.set_xlabel("BPD")
plt.set_ylabel("Feet" , color = 'b')
#ax1.set_ylabel("BHP", color = 'r')
#ax1.set_ylabel("Effiency", color = 'g')
# Set tight layout
fig = self.mplwidget.figure.tight_layout()
fig = self.mplwidget_2.figure.tight_layout()
fig = self.mplwidget_3.figure.tight_layout()
這是我第一次使用matplotlib。我正在使用Python xy包和QT設計器。 Python xy有一個內置的用於QT的MPL小部件,這就是我正在使用的。對我來說工作正常,直到我replot:有什麼辦法使當前的設置(pyplot)重繪? –
我不熟悉python xy,但是通過'self.mplwidget.figure'訪問圖形的外觀,所以你應該能夠調用'self.mplwidget.figure.canvas.draw()' – user3419537
我實際上發現,在我寫這篇文章之後,它正在爲主要情節工作,但是這些情節仍然沒有清理出來,並且不斷地繪製在另一個之上。有沒有人有處理子圖的建議? –