使用Matplotlib

时间:2016-09-14 21:40:49

标签: python python-2.7 matplotlib pyqt4

我正在尝试根据实时数据动态地将点移动到图表上的特定位置。我基本上是绘制图形,从工作线程发出一个信号,该信号调用了' move_dot'功能。它工作,但它很慢。我每秒只能调用一帧。我在pythonxy中使用MPL小部件。我也在使用Windows。有没有办法加快速度呢?

以下是代码:

from PyQt4 import QtGui
import ui_sof_test  #Gui File
import sys
from matplotlib.ticker import AutoMinorLocator

class Gui(QtGui.QMainWindow, ui_sof_test.Ui_MainWindow):    
    def __init__(self):        
        super(self.__class__, self).__init__()        
        self.setupUi(self)  # This is defined in ui_pumptest.py file automatically       
        self.mpl_plot(0)  
        self.move_dot()

    cursorplot = 0
    def move_dot(self, x = 100, y = 5, color = 'r'):
        fig = self.mplwidget_3.figure
        par = fig.add_subplot(111)
        ax3 = par.twinx()
        plty = fig.gca()
        plty.yaxis.set_visible(False)                
        ax3.plot(x, y, color, marker = 'o', linewidth = 1)                
        fig.canvas.draw()
        #ax3.cla()                

    def mpl_plot(self, plot_page, replot = 0):  #Data stored in lists 
        fig = self.mplwidget_3.figure    #Add a figure   
        #Clears Figure if data is replotted
        if replot == 1:
            fig.clf()
        plty = fig.gca()
        plty.yaxis.set_visible(False)        
        par0 = fig.add_subplot(111)
        #Add Axes
        plt = par0.twinx()
        #Plot Chart
        plt.hold(False)        
        plt.plot([0,100,200,300,400,500], [1,3,2,4,7,5], 'b', linestyle = "dashed", linewidth = 1) 
        #Plot Factory Power        
        minorLocatorx = AutoMinorLocator()        
        plt.xaxis.set_minor_locator(minorLocatorx)
        plt.tick_params(which='both', width= 0.5)
        plt.tick_params(which='major', length=7)
        plt.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')

        plt.minorticks_on()
        #Make Border of Chart White
        fig.set_facecolor('white')    

        #Plot Grid        
        plt.grid(b=True, which='both', color='k', linestyle='-') 

        #Manually make vertical gridlines. Above line doesn't make vertical lines for some reason
        for xmaj in plt.xaxis.get_majorticklocs():
            plt.axvline(x=xmaj, color = 'k',ls='-')
        for xmin in plt.xaxis.get_minorticklocs():
            plt.axvline(x=xmin, color = 'k', ls='-')

        #Set Scales         

        plt.yaxis.tick_left()

        # Set Axes Colors
        plt.tick_params(axis='y', colors='b')       
        # Set Chart Labels        
        plt.yaxis.set_label_position("left")
        plt.set_xlabel(" ")
        plt.set_ylabel(" " , color = 'b')
        fig.canvas.draw() 
        self.move_dot()

def main():
    app = QtGui.QApplication(sys.argv)  # A new instance of QApplication
    form = Gui()  # We set the form to be our ExampleApp (design)
    form.show()  # Show the form
    app.exec_()  # and execute the. app

if __name__ == '__main__':  # if we're running file directly and not importing it
    main()  # run the main function

0 个答案:

没有答案