在QWidg中的两个matplotlib图之间循环

2024-10-02 16:21:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QWidget,我用它来主持一些matplotlib绘图。我有多个绘图(目前有两个,但会增加),但一次只显示一个绘图。我有一个超时事件,每5秒钟当前的绘图就会从小部件中“删除”,下一个绘图就会添加到小部件中。这是我第一次体验matplotlib绘图,所以我不确定我的方法(下面)是否正确。你知道吗

设置两个绘图:

#PLOT 1
Data = #inherited from another class
DataArray = #inherited from another class

DataPos = DataArray > 0
DataNeg = DataArray < 0

self.Figure1 = plt.figure('Figure1')
self.Figure1.patch.set_alpha(0)
self.Canvas1 = FigureCanvas(self.Figure1)
self.LayoutWidget.addWidget(self.Canvas1)

self.Ax1 = plt.subplot(1, 1, 1, axisbg='black')
self.Ax1.bar(np.arange(len(DataArray))[DataPos], DataArray[DataPos], width=1, color='blue')
self.Ax1.bar(np.arange(len(DataArray))[DataNeg], DataArray[DataNeg], width=1, color='red')
self.Ax1.tick_params(axis='y', colors='white')
plt.title('GRAPH TIME', color='w', fontsize=30, fontname='Sans Serif', fontweight='bold'
self.Figure1.tight_layout()
plt.close() #Not sure if/why I need this line?

#PLOT 2
Radius = [1, 2, 3, 4, 5, 6]
Area = [1, 4, 2, 4, 6, 8]
self.Figure2 = plt.figure('Figure2')
self.Figure2.patch.set_alpha(0)
self.Canvas2 = FigureCanvas(self.Figure2)

self.Ax2 = plt.subplot(1, 1, 1, axisbg='black')
self.Ax2.tick_params(axis='y', colors='white')
plt.title('GRAPH TITLE', colors='w', fontsize=30, fontname='Sans Serif', fontweight='bold')
self.Figure2.tight_layout()
plt.plot(Radius, Area, color='blue', linewidth=5)
plt.close() #Again, not sure if/why this is needed.

以及更改小部件中绘图的超时函数:

#if current plot = 1:
    self.LayoutWidget.removeWidget(self.Canvas1)
    self.LayoutWidget.addWidget(self.Canvas2)
    #This works as desired!

#elif current plot = 2:
    self.LayoutWidget.removeWidget(self.Canvas2)
    self.LayoutWidget.addWidget(self.Canvas1)
    #This doesn't work!

#Stop the timeout timer, then restart the timer, etc.

这是可以接受的方法吗?你知道吗


Tags: self绘图部件pltcolorcolorsax1addwidget
1条回答
网友
1楼 · 发布于 2024-10-02 16:21:17

我已经用这个玩了一个小时左右,已经实现了我想要的功能。我原来的代码中有一些东西需要修改。下面是修改后的代码,可以根据需要工作。你知道吗

设置两个绘图:

#PLOT 1
Data = #inherited from another class
DataArray = #inherited from another class

DataPos = DataArray > 0
DataNeg = DataArray < 0

self.Figure1 = plt.figure('Figure1')
self.Figure1.patch.set_alpha(0)
self.Canvas1 = FigureCanvas(self.Figure1)
self.LayoutWidget.addWidget(self.Canvas1)

self.Ax1 = plt.subplot(1, 1, 1, axisbg='black')
self.Ax1.bar(np.arange(len(DataArray))[DataPos], DataArray[DataPos], width=1, color='blue')
self.Ax1.bar(np.arange(len(DataArray))[DataNeg], DataArray[DataNeg], width=1, color='red')
self.Ax1.tick_params(axis='y', colors='white')
plt.title('GRAPH TIME', color='w', fontsize=30, fontname='Sans Serif', fontweight='bold'
self.Figure1.tight_layout()
self.Canvas1.show()

#PLOT 2
Radius = [1, 2, 3, 4, 5, 6]
Area = [1, 4, 2, 4, 6, 8]
self.Figure2 = plt.figure('Figure2')
self.Figure2.patch.set_alpha(0)
self.Canvas2 = FigureCanvas(self.Figure2)

self.Ax2 = plt.subplot(1, 1, 1, axisbg='black')
self.Ax2.tick_params(axis='y', colors='white')
plt.title('GRAPH TITLE', colors='w', fontsize=30, fontname='Sans Serif', fontweight='bold')
self.Figure2.tight_layout()
plt.plot(Radius, Area, color='blue', linewidth=5)

以及超时功能:

#if current plot = 1:
    self.Canvas1.close()
    self.LayoutWidget.removeWidget(self.Canvas1)
    self.LayoutWidget.addWidget(self.Canvas2)
    self.Canvas2.show()

#elif current plot = 2:
    self.Canvas2.close()
    self.LayoutWidget.removeWidget(self.Canvas2)
    self.LayoutWidget.addWidget(self.Canvas1)
    self.Canvas1.show()

#Stop the timeout timer, then restart the timer, etc.

很简单!你知道吗

相关问题 更多 >