Ulf*_*ren 7 widget pyqt4 python-3.x pyqtgraph
我试图绘制每天几个小时的时间序列,每天之间没有空白时间。如果我使用 pg.GraphicsWindow,它工作正常。刻度标签是 9:00 10:00 ..17:00。如果我使用 pg.PlotWidget 或 pg.PlotWindow、Alt2 和 Alt3,则它不起作用,但显示的是 normla 0.1 0.2 ..。代码运行并调用 TimeAxisItem 类,但 x 轴刻度标签不会更改。我有一个更大的程序,带有 Qt.QMainWindow() 和 QtGui.QGridLayout(),它不接受 pg.GraphicsWindow()。我错过了什么??如何在 PlotWidget 中设置刻度标签?
# -*- coding: utf-8 -*-
''' Setting x-axis labels for time series
'''
import datetime as dt
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
class TimeAxisItem(pg.AxisItem):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
tr=np.arange('2016-06-10 09:00', '2016-06-10 18:00', dtype='datetime64[h]')
tnorm=(tr-tr[0])/(tr[-1]-tr[0]) #Map time to 0.0-1.0
ttick=list()
for i,t in enumerate(tr):
tstr=np.datetime64(t).astype(dt.datetime)
ttick.append( (tnorm[i], tstr.strftime("%H:%M")) )
self.setTicks([ttick])
def main():
app = QtGui.QApplication([])
x=np.arange(0.0, 1.0, 0.02)
y=np.sin(2*np.pi*x)
#Alt 1
win = pg.GraphicsWindow(title="Basic plotting")
plot=win.addPlot(title='Timed data', axisItems={'bottom': TimeAxisItem(orientation='bottom')})
plot.plot(x,y)
# Alt 2
#win = pg.PlotWidget(title="Basic plotting")
#win.plot(title='Timed data', axisItems={'bottom': TimeAxisItem(orientation='bottom')})
#win.plot(x,y)
#Alt 3
#win=pg.PlotWindow(title="Basic plotting")
#win.plot(title='Timed data', axisItems={'bottom': TimeAxisItem(orientation='bottom')})
#win.plot(x,y)
win.show()
app.exec_()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我已经解决了这个问题,这是我的代码。欢迎评论
# -*- coding: utf-8 -*-
''' Setting x-axis labels for time series
Window, pyqtgraph (09.10) numpy (1.11.1) PyQt4(4.11.4)
'''
import datetime as dt
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
def main():
app = QtGui.QApplication([])
#Plot some data for 2 days
x=np.arange(0.0, 1.0, 0.02)
day0=100*np.sin(2*np.pi*x) # Just som data to plot
day1=100*(np.cos(2*np.pi*x)-1) # Just som data to plot
xx=np.concatenate([x,x+1]) # two days
yy=np.concatenate([day0,day1])
win = pg.PlotWidget(title="Plotting time series")
win.resize(1600,400)
win.plot(xx,yy)
# Tick labels
tr=np.arange('2016-06-10 09:00', '2016-06-10 18:00', dtype='datetime64[2h]') # tick labels one day
tday0=(tr-tr[0])/(tr[-1]-tr[0]) #Map time to 0.0-1.0 day 2 1.0-2.0 ...
tday1=tday0+1
tnorm=np.concatenate([tday0,tday1])
tr[-1]=tr[0] # End day=start next day
# Create tick labels for axis.setTicks
ttick=list()
for i,t in enumerate(np.concatenate([tr,tr])):
tstr=np.datetime64(t).astype(dt.datetime)
ttick.append( (tnorm[i], tstr.strftime("%H:%M")))
ax=win.getAxis('bottom') #This is the trick
ax.setTicks([ttick])
# Set grid x and y-axis
ax.setGrid(255)
ay=win.getAxis('left')
ay.setGrid(255)
win.show()
app.exec_()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
# -*- coding: utf-8 -*-
''' Setting x-axis labels for time series
Window, pyqtgraph (09.10) numpy (1.11.1) PyQt4(4.11.4)
'''
import datetime as dt
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
def main():
app = QtGui.QApplication([])
#Plot some data for 2 days
x=np.arange(0.0, 1.0, 0.02)
day0=100*np.sin(2*np.pi*x) # Just som data to plot
day1=100*(np.cos(2*np.pi*x)-1) # Just som data to plot
xx=np.concatenate([x,x+1]) # two days
yy=np.concatenate([day0,day1])
win = pg.PlotWidget(title="Plotting time series")
win.resize(1600,400)
win.plot(xx,yy)
# Tick labels
# tick labels one day
tr=np.arange('2016-06-10 09:00', '2016-06-10 18:00', dtype='datetime64[2h]')
tday0=(tr-tr[0])/(tr[-1]-tr[0]) #Map time to 0.0-1.0 day 2 1.0-2.0 ...
tday1=tday0+1
tnorm=np.concatenate([tday0,tday1])
tr[-1]=tr[0] # End day=start next day
# Create tick labels for axis.setTicks
ttick=list()
for i,t in enumerate(np.concatenate([tr,tr])):
tstr=np.datetime64(t).astype(dt.datetime)
ttick.append( (tnorm[i], tstr.strftime("%H:%M")))
ax=win.getAxis('bottom') #This is the trick
ax.setTicks([ttick])
# Set grid x and y-axis
ax.setGrid(255)
ay=win.getAxis('left')
ay.setGrid(255)
win.show()
app.exec_()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4494 次 |
| 最近记录: |