Python 在matplotlib TIMEDIATION plot中反转x记号标签,而不反转数据?

Python 在matplotlib TIMEDIATION plot中反转x记号标签,而不反转数据?,python,matplotlib,Python,Matplotlib,考虑“范围滚动”的代码,我也在下面粘贴了它 默认情况下,运行此命令会生成如下打印: 由于新数据显示在右边缘,并且绘图从右向左滚动,因此我希望右边缘的x记号标签为0,其余记号标签应从右向左增长 如果行self.ax1.set_xlim(self.ax1.get_xlim()[:-1])#反转轴,但方向未注释,则勾号标签将反转,并与我所需的一样-但滚动/范围滚动的方向也是如此: 那么,我如何保持原始行为(新数据显示在右边缘;打印从右向左滚动)-但反转打印记号标签,使x记号标签从右边缘的0开始,并

考虑“范围滚动”的代码,我也在下面粘贴了它

默认情况下,运行此命令会生成如下打印:

由于新数据显示在右边缘,并且绘图从右向左滚动,因此我希望右边缘的x记号标签为0,其余记号标签应从右向左增长

如果行
self.ax1.set_xlim(self.ax1.get_xlim()[:-1])#反转轴,但方向
未注释,则勾号标签将反转,并与我所需的一样-但滚动/范围滚动的方向也是如此:

那么,我如何保持原始行为(新数据显示在右边缘;打印从右向左滚动)-但反转打印记号标签,使x记号标签从右边缘的0开始,并从右向左增长


守则:

###################################################################
#                                 #
#绘制活动图(PyQt5)#
#          -----------------------------          #
#将MATPLOTLIB动画嵌入到#
#自己的GUI#
#                                 #
###################################################################
导入系统
导入操作系统
从PyQt5.QtWidgets导入*
从PyQt5.QtCore导入*
从PyQt5.QtGui导入*
导入功能工具
将numpy作为np导入
将随机导入为rd
导入matplotlib
matplotlib.use(“Qt5Agg”)
从matplotlib.figure导入图形
从matplotlib.animation导入时间信息
从matplotlib.lines导入Line2D
从matplotlib.backends.backend_qt5agg导入FigureCanvas qtagg as FigureCanvas
导入时间
导入线程
类CustomMainWindow(QMainWindow):
定义初始化(自):
超级(CustomMainWindow,self)。\uu初始化
#定义主窗口的几何图形
self.setGeometry(300300800400)
self.setWindowTitle(“我的第一个窗口”)
#创建一个框架
self.FRAME_A=QFrame(self)
self.FRAME_A.setStyleSheet(“QWidget{background color:%s}”%QColor(210210235255.name())
self.LAYOUT_A=QGridLayout()
self.FRAME_A.setLayout(self.LAYOUT_A)
self.setCentralWidget(self.FRAME_A)
#放置缩放按钮
self.zoomBtn=QPushButton(文本='zoom')
自缩放设置固定大小(100,50)
self.zoomBtn.clicked.connect(self.zoomBtn操作)
self.LAYOUT\u A.addWidget(self.zoomBtn,*(0,0))
#放置matplotlib图形
self.myFig=CustomFigCanvas()
self.LAYOUT\u A.addWidget(self.myFig,*(0,1))
#将callbackfunc添加到。。
myDataLoop=threading.Thread(name='myDataLoop',target=dataSendLoop,daemon=True,args=(self.addData\u callbackFunc,)
myDataLoop.start()
self.show()
返回
def缩放动作(自身):
打印(“放大”)
self.myFig.zoomIn(5)
返回
def ADDDDATA_callbackFunc(自身,值):
#打印(“添加数据:+str(值))
self.myFig.addData(值)
返回
“最终类”
类CustomFigCanvas(图类、时间信息):
定义初始化(自):
self.addedata=[]
打印(matplotlib.\uuuu版本\uuuu)
#数据
self.xlim=200
self.n=np.linspace(0,self.xlim-1,self.xlim)
a=[]
b=[]
a、 附加(2.0)
a、 附加(4.0)
a、 附加(2.0)
b、 附加(4.0)
b、 追加(3.0)
b、 附加(4.0)
self.y=(self.n*0.0)+50
#窗户
self.fig=图(figsize=(5,5),dpi=100)
self.ax1=self.fig.add_子批次(111)
#self.ax1设置
self.ax1.set_xlabel('time')
self.ax1.set_ylabel('原始数据')
self.line1=Line2D([],[],color='blue')
self.line1_tail=Line2D([],[],color='red',线宽=2)
self.line1_head=Line2D([]、[]、color='red',marker='o',markeredgecolor='r'))
self.ax1.add_行(self.line1)
self.ax1.add_行(self.line1_尾)
self.ax1.add_行(self.line1_头)
self.ax1.set_xlim(0,self.xlim-1)
##self.ax1.set_xlim(self.ax1.get_xlim()[::-1])#反转轴,但也反转方向
self.ax1.set_ylim(01100)
FigureCanvas.\uuuu init\uuuuu(self,self.fig)
TIMEDNIMATION.\uuuuu init\uuuuu(self,self.fig,interval=50,blit=True)
返回
def新帧顺序(自):
返回iter(范围(自身尺寸))
定义初始绘制(自):
lines=[self.line1,self.line1\u tail,self.line1\u head]
对于l in行:
l、 设置_数据([],[])
返回
def addData(自身、值):
self.addedData.append(值)
返回
def缩放(自身,值):
bottom=self.ax1.get_ylim()[0]
top=self.ax1.get_ylim()[1]
底部+=值
top-=值
self.ax1.set_ylim(底部、顶部)
self.draw()
返回
定义步骤(自,*参数):
#扩展TimedAnimation类的_step()方法。
尝试:
时间信息。_步(自,*args)
例外情况除外,如e:
self.abc+=1
打印(str(self.abc))
时间信息。\u停止(自)
通过
返回
def_绘图_帧(自身,帧数据):
保证金=2
而(len(self.addedata)>0):
self.y=np.roll(self.y,-1)
self.y[-1]=self.addedata[0]
del(self.addedata[0])
self.line1.set_数据(self.n[0:self.n.size-margin],self.y[0:self.n.size-margin])
self.line1\u tail.set\u数据(np.append(self.n[-10:-1-边距]、self.n[-1-边距]、np.append(self.y[-10:-1-边距]、self.y[-1-边距])
self.line1\u head.set\u数据(self.n[-1-margin],self.y[-1-margin])
self.\u Drawed\u Artisters=[self.line1,self.line1\u tail,self.line1\u head]
返回
“最终类”
#您需要设置一个信号槽机制,以
#以线程安全的方式将数据发送到GUI。
#相信我,如果你做得不对,事情
#出了很大的差错。。
类通信(QObject):
数据_信号=PYQT信号(浮动)
“最终类”
def dataSendLoop(addData_callbackFunc):
#设置信号槽机制。
mySrc=Communicate()
mySrc.data\u signal.connect(addData\u callbackFunc)
#模拟一些数据
N
xticks = list(range(24,200,25))
self.ax1.set_xticks(xticks)
self.ax1.set_xticklabels([199-x for x in xticks])