如何在 python pyqtgraph PlotWidget 中设置刻度标签

2024-01-12

我正在尝试绘制每天几个小时的时间序列,每天之间没有空白时间。如果我使用 pg.GraphicsWindow,则效果很好。刻度标签为 9:00 10:00 ..17:00。如果我使用 pg.PlotWidget 或 pg.PlotWindow,Alt2 和 Alt3 则不起作用,但会显示范数 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()

# -*- 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 python pyqtgraph PlotWidget 中设置刻度标签 的相关文章

  • python3中“super”对象没有属性“__getattr__”

    如何覆盖 getattr 使用 python 3 和继承 当我使用以下内容时 class MixinA def getattr self item Process item and return value if known if item
  • Python 3 中的相对导入

    我想从同一目录中的另一个文件导入函数 通常 以下其中一项有效 from mymodule import myfunction from mymodule import myfunction 但另一个给了我以下错误之一 ImportError
  • Selenium Python Firefox webdriver:无法修改配置文件

    我想在 Webdriver Firefox 实例上使用 新选项卡而不是窗口 选项 1 我创建了一个启用此选项的配置文件 但是当我使用该配置文件时 很多选项都可以 但不是这个 2 加载配置文件后 我尝试更改代码中的选项 但它不起作用 我的代码
  • 如何将 AWS Kinesis Video Stream GetMedia API 输出解码为 mp3/wav?

    我现在使用 GetMedia API 通过 AWS Connect 服务将数据提取到 Kinesis Video Stream KVS 我能够提取Payload但如何将此输出转换为 mp3 wav 我想将此输出提取到 AWS Transcr
  • “ModuleNotFoundError:我的 Docker 容器中没有名为 的模块”

    我正在尝试在 Docker 容器中运行 python 脚本 但我不知道为什么 python 找不到任何 python 模块 我认为它与 PYTHONPATH 环境变量有关 所以我尝试将其添加到 Dockerfile 中 如下所示 ENV P
  • 初始化 dask 分布式工作线程的状态

    我正在尝试做类似的事情 resource MyResource def fn x something dosemthing x resource return something client Client results client m
  • 类型错误:只能使用标量值执行操作

    如果您能让我知道如何为所提供的表格绘制一些信息丰富的图表 我将不胜感激here https www iasplus com en resources ifrs topics use of ifrs 例如 我需要一个名为 国内非上市公司 非上
  • 如何向 scikit-learn KD 树添加/删除数据点?

    我想知道是否可以在创建 scikit learn KDTree 实例后添加或删除数据点 例如 from sklearn neighbors import KDTree import numpy as np X np array 1 1 2
  • 如何使用Python和h5py读取HDF5属性(元数据)

    我有一个 HDF5 文件 里面有多个文件夹 每个文件夹都添加了属性 有些将属性称为 元数据 我知道如何访问文件夹内的键 但不知道如何使用 Python 提取属性h5py包裹 以下是 HDFView 的属性 Folder1 800 4 Gro
  • shap.TreeExplainer 和 shap.Explainer 条形图之间的区别

    对于下面给出的代码 我得到了不同的条形图shap values 在此示例中 我的数据集为 1000train样本有 9 个类别和 500 个test样品 然后 我使用随机森林作为分类器并生成模型 当我开始生成shap条形图在这两种情况下得到
  • sklearn ShuffleSplit 出现“__init__() 获得参数 'n_splits' 的多个值”错误

    我正进入 状态 init 获得参数 n splits 的多个值 该行的错误 cv ShuffleSplit n splits 10 test size 0 2 random state 0 在下面的代码中 import matplotlib
  • 捕获 subprocess.run() 的输入

    我在 Windows 上有一个交互式命令行 exe 文件 是由其他人编写的 当程序出现异常时 它会终止 并且我对程序的所有输入都会丢失 所以我正在编写一个 python 程序 它调用一个阻塞子进程subprocess run 并捕获所有输入
  • PyQt:数据不可 JSON 序列化

    我是 PyQt GUI 的新手 我想获取a的数据QLineEdit文本框 为此我正在使用text 方法 我正在获取数据 但数据类型是QString 我需要将其作为 json 数据传输到服务器 为此我使用json dumps 方法 但我收到错
  • tkinter - 使用按钮在帧之间来回切换

    我需要功能 最好是一个功能 当按下下一页和后退按钮时可以在页面之间来回切换 我想这可以通过将布尔变量分配给后退和下一页按钮来完成 不确定是否可以这样做 来确定您是否要前进或后退所有页面的有序列表 需要知道当前升高的框架的索引 索引可用于找出
  • python 排列有问题

    我在排列方面遇到一些问题 当谈到Python时 我真的是一个大菜鸟 所以任何帮助将不胜感激 假设我在文本文件中有一个范围为 1 6 的列表 例如 它看起来像 1 2 3 4 5 6 我想打开所述 txt 文件并计算这 6 个数字中 N 的所
  • 占据花车的地板

    我发现了两种在 Python 中占据发言权的方法 3 1415 1 and import math math floor 3 1415 第一种方法的问题是它返回一个浮点数 即3 0 第二种方法感觉很笨拙而且太长 在 Python 中是否有替
  • 找到不固定长度的数字的所有可能排列以达到给定的总和或乘积

    使用普通 Python 或任何 Python 库 您将如何查找列表中元素的所有可能组合l等于给定值val using addition 减法 or 乘法 假设列表的长度并不总是相同 假设列表中的每个元素在每个组合中只能使用一次 并假设没有使
  • 如何使用Python3、Selenium Chrome WebDriver在第一次请求之前预加载cookie?

    是否可以使用添加cookieadd cookie 对于一个域 比如说stackoverflow com在使用 Selenium Chrome WebDriver 进行实际请求之前get 到域上的页面stackoverflow com 尝试时
  • multiprocessing.Queue 中的 ctx 参数

    我正在尝试使用 multiprocessing Queue 模块中的队列 实施 https docs python org 3 4 library multiprocessing html exchang objects Between p
  • 哪种方式最适合Python工厂注册?

    这是一个关于这些方法中哪一种被认为是最有效的问题 Pythonic 我不是在寻找个人意见 而是在寻找惯用的观点 我的背景不是Python 所以这会对我有帮助 我正在开发一个可扩展的 Python 3 项目 这个想法类似于工厂模式 只不过它是

随机推荐