秦岭_梧桐 2023-02-12 14:37 采纳率: 0%
浏览 302
已结题

python pyqtgraph 画多Y轴时,新增的Y轴(Y2)与初始默认Y轴(Y1)的坐标刻度上下位置不能对齐

python pyqtgraph 画多Y轴时,新增的Y轴(Y2)与初始默认Y轴(Y1)的坐标刻度上下位置不能对齐!!!
“注意:是左右坐标轴的总高度,和起始位置不对齐!!!”

img


        pg.setConfigOptions(antialias=True, background='w')  # pyqtgraph全局变量设置函数,antialias=True开启曲线抗锯齿
        self.win1 = pg.GraphicsLayoutWidget()  # 创建pg layout,可实现数据界面布局自动管理
        # pg绘图窗口可以作为一个widget添加到GUI中的graph_layout,当然也可以添加到Qt其他所有的容器中
        self.verticalLayout.addWidget(self.win1)
        # 至少有一个绘图项使用它自己的视图框和左轴。
        self.pI = self.win1.addPlot(title="OCR chart")  # 定义一个绘图项
        #self.pI = pg.PlotItem(title="OCR chart")  # 定义一个绘图项
        self.v1= self.pI.vb  # 对绘图项的视图框的引用
        # 定义轴
        a2 =pg.AxisItem("right")
        #self.pI.setLabel('right', text='Res', units='ohm.cm', color='#000000')  # y轴设置函数
        #a2 = self.pI.getAxis("right")
        # 视图框,用于存放折线
        self.v2= pg.ViewBox()
        # 向布局添加轴
        # 注意这里col参数的位置

        self.win1.addItem(a2, row=2, col=2, rowspan=1, colspan=1)
        self.win1.addItem(self.pI, row=2, col=1, rowspan=1, colspan=1)  # 添加绘图框到图形布局
        #self.win1.addItem(b1, row=3, col=1, rowspan=1, colspan=1)  # 添加绘图框到图形布局

        # 向绘图框添加视图框
        self.win1.scene().addItem(self.v2)
        # 用轴连接 存放折线的视图框
        a2.linkToView(self.v2)
        # 链接视图框,我也不知道干嘛这样写,但是写上就会在--绘图项的视图框上,整体缩放所有的折线
        self.v2.setXLink(self.v1)
        # 轴标签
        self.pI.setLabel('left', text='Y1', units='ohm.cm', color='#000000')  # y轴设置函数
        a2.setLabel('Y2', color='#2E2EFE')
        self.pI.setLabel('bottom', text='X', units='mm')  # x轴设置函数
        # 给绘图项的视图框添加折线xy点的值,折线颜色
        #  调整大小时更新
        self.v1.sigResized.connect(self.updateviews)        # 开始时自动调整一次以适应视图
        # enableAutoRange 启用自动范围
        self.v2.enableAutoRange(axis=pg.ViewBox.XYAxes, enable=True)

展开全部

  • 写回答

12条回答 默认 最新

  • 特创数字科技 阿克苏市特创数字科技中心官方账号 2023-02-17 09:32
    关注

    可以使用pyqtgraph的AxisItem类的setTicks方法来设置Y1和Y2轴的刻度位置,以使它们对齐。

    例如:

    获取Y1和Y2轴

    y1Axis = plot.getAxis('left')
    y2Axis = plot.getAxis('right')

    设置Y1和Y2轴的刻度位置

    y1Axis.setTicks([[(0, '0'), (1, '1'), (2, '2')], [(0, '0'), (1, '1'), (2, '2')]])
    y2Axis.setTicks([[(0, '0'), (1, '1'), (2, '2')], [(0, '0'), (1, '1'), (2, '2')]])

    评论
  • weixin_46428227 2023-02-12 15:01
    关注

    如果您在使用python的pyatgraph库时遇到了新增的Y轴(Y2)与默认的Y轴(Y1)坐标刻度不能对齐的问题,您可以试试以下解决方案:

    1. 设置Y轴的范围:您可以通过设置Y轴的范围来保证两个Y轴的刻度对齐。

    2. 设置坐标轴的刻度:您可以通过设置坐标轴的刻度来保证两个Y轴的刻度对齐。

    3. 使用twinx函数:您可以使用twinx函数,它可以自动对齐两个Y轴的刻度。

    评论
  • 快撑死的鱼 2023-02-12 15:05
    关注

    回答不易 求求您采纳点赞哦 感激不尽

    如果您想让两个Y轴(Y1和Y2)的坐标刻度对齐,您可以将它们关联到同一个视图框。

    例如:

    a2.linkToView(self.v1)
    
    

    替换以下代码:

    self.v2.setXLink(self.v1)
    
    
    
    评论
  • 那个小橙子 2023-02-12 15:06
    关注

    用setYRange()函数将两个Y轴的范围设置为相同的值。比如
    import pyqtgraph as pg
    import numpy as np
    from pyqtgraph.Qt import QtCore, QtGui

    app = QtGui.QApplication([])

    win = pg.GraphicsWindow()
    win.setWindowTitle("pyqtgraph example")

    p1 = win.addPlot()
    p1.setLabel("left", "Y1")
    p1.setLabel("bottom", "X")

    p2 = win.addPlot(row=1, col=1)
    p2.setLabel("left", "Y2")
    p2.setLabel("bottom", "X")
    p2.setYRange(p1.getViewBox().viewRange()[0])

    x = np.arange(100)
    y1 = np.sin(x / 10.0)
    y2 = np.cos(x / 10.0)
    p1.plot(x, y1)
    p2.plot(x, y2)

    QtGui.QApplication.instance().exec_()

    评论
  • junsonsenyu 2023-02-12 15:33
    关注

    当使用pyqtgraph画多Y轴时,新增的Y轴(Y2)与初始默认Y轴(Y1)的坐标刻度上下位置不能对齐,这是由于pyqtgraph
    默认的Y轴(Y1)的坐标刻度是从0开始的,而新增的Y轴(Y2)的坐标刻度是从最小值开始的,因此导致了两者的坐标
    刻度上下不对齐。
    方法是:可以在新增的Y2上设置一个偏移量,使其坐标刻度与默认Y1的坐标刻度对齐。

    评论
  • weixin_50876666 2023-02-12 17:14
    关注

    pyqtgraph是一个用于创建图形的python库。当在pyqtgraph中画多个Y轴时,默认的Y轴(Y1)与新增Y轴(Y2)的坐标刻度可能不能对齐。这是因为pyqtgraph在默认情况下是根据数据的范围计算坐标刻度的,而新增的Y轴可能数据范围不一样,导致坐标刻度不对齐。
    要解决这个问题,可以使用pyqtgraph的setYRange()方法手动设置坐标轴的范围,以便使默认的Y轴(Y1)和新增的Y轴(Y2)的坐标刻度对齐。例如:

    设置Y1轴的范围
    p1.getAxis("left").setYRange(0, 10)
    设置Y2轴的范围
    p1.getAxis("right").setYRange(0, 100)

    在上面的代码中,p1代表图形对象,getAxis("left")获取默认的Y轴(Y1),getAxis("right")获取新增的Y轴(Y2),setYRange()方法用于设置坐标轴的范围。

    评论
  • Yang2023. 2023-02-13 01:28
    关注

    您好,根据您提供的代码,我发现您在设置Y2轴的刻度位置时,没有设置Y2轴的刻度对齐方式,可以尝试将以下代码添加到您的代码中:

    
    self.pI.setY2AxisAlignment(align=QtCore.Qt.AlignLeft)
    
    

    ```

    这样就可以将Y2轴的刻度与Y1轴的刻度对齐。

    评论 编辑记录
  • 星 沅 2023-02-13 03:01
    关注

    PyQtGraph允许你添加多个Y轴,以在同一图中显示不同的数据范围。要实现这一点,需要定义额外的轴,并将其链接到一个新的视图框,该视图框链接到绘图项的视图框。

    **
    根据你的代码,你正在使用a2 = pg.AxisItem("right")创建新的轴,然后使用self.win1.addItem(a2, row=2, col=2, rowspan=1, colspan=1)将其添加到布局中。接下来,你创建了一个新的视图框self.v2 = pg.ViewBox()并将其添加到场景中:self.win1.scene().addItem(self.v2)。接下来,使用a2.linkToView(self.v2)将轴与视图框相关联,并使用self.v2.setXLink(self.v1)将视图框与绘图项的视图框相关联。

    最后,你使用self.pI.setLabel('left', text='Y1', units='ohm.cm', color='#000000')设置左轴的标签,并使用a2.setLabel('Y2', color='#2E2EFE')设置右轴的标签。
    **
    如果你在添加新的Y轴时遇到了坐标刻度位置不对齐的问题,可以通过以下步骤尝试解决:

    确保您的数据对两个Y轴的范围都合适,以便不会出现不同的Y轴的刻度范围有很大的差异,导致刻度位置不对齐

    可以使用它来绘制多 Y 轴的图形。在这里,你的问题是新增的 Y2 轴与默认的 Y1 轴的坐标刻度不能对齐,要解决这个问题,您需要在添加 Y2 轴的时候,使用特定的方法对它的位置进行调整。

    对于添加的 Y2 轴,你可以使用以下代码对其位置进行调整:

    # 定义右轴
    a2 = pg.AxisItem("right")
    
    # 向布局添加轴
    self.win1.addItem(a2, row=2, col=2, rowspan=1, colspan=1)
    
    # 向绘图框添加视图框
    self.win1.scene().addItem(self.v2)
    
    # 用轴连接 存放折线的视图框
    a2.linkToView(self.v2)
    
    # 链接视图框
    self.v2.setXLink(self.v1)
    
    # 设置 Y2 轴标签
    a2.setLabel('Y2', color='#2E2EFE')
    

    请注意,你需要在 addItem 方法中设置 row、col、rowspan 和 colspan 参数,以决定 Y2 轴的位置。可以通过不断调整这些参数的值来调整 Y2 轴的位置

    展开全部

    评论
  • Telescope720 2023-02-13 08:34
    关注

    您可以使用以下方法来调整新增的 Y2 轴与初始默认的 Y1 轴的坐标刻度的对齐方式。

    首先,您需要确保 Y1 轴和 Y2 轴具有相同的数据范围。您可以使用 setRange() 方法来设置轴的数据范围。

    然后,您需要同步缩放 Y1 轴和 Y2 轴。您可以使用 ViewBox 类将 Y1 轴和 Y2 轴关联起来,并同时缩放它们。您可以使用如下代码将 Y1 轴和 Y2 轴关联起来:

    # 用轴连接存放折线的视图框
    a2.linkToView(self.v2)
    # 链接视图框,我也不知道干嘛这样写,但是写上就会在--绘图项的视图框上,整体缩放所有的折线
    self.v2.setXLink(self.v1)
    

    最后,您可以在代码中指定 Y2 轴的刻度范围和步长,以确保刻度对齐。您可以使用如下代码指定 Y2 轴的刻度范围和步长:

    a2.setTickSpacing(major=10, minor=2)
    
    
    
    评论
  • 傻傻的心动 2023-02-13 08:36
    关注

    如果您使用pyqtgraph画多Y轴图形,但是新增的Y轴与默认的Y轴坐标刻度不能对齐,可以尝试以下解决方案:

    1. 调整坐标轴长度:可以通过设置两个Y轴的长度来使它们对齐。可以使用pyqtgraph中的setLength()方法来设置坐标轴的长度。
    1. 调整坐标轴范围:可以通过调整坐标轴的范围来使它们对齐。可以使用pyqtgraph中的setRange()方法来设置坐标轴的范围。
    1. 调整坐标轴位置:可以通过调整坐标轴的位置来使它们对齐。可以使用pyqtgraph中的setPos()方法来设置坐标轴的位置。
    1. 使用回调函数:可以使用回调函数来确保两个坐标轴始终对齐。每次坐标轴的值更改时,都可以触发回调函数,以确保两个坐标轴始终对齐。

    根据您的需求,您可以选择一种或多种方法来解决这个问题。希望这些信息对您有所帮助。

    评论
  • zzwwtyyds 2023-02-17 03:40
    关注

    在pyqtgraph中,不同的Y轴的刻度线位置是由它们各自的缩放因子所控制的。在你的代码中,你使用了以下的代码来链接第二个视图框 v2 与 v1:

    self.v2.setXLink(self.v1)
    
    
    

    这个代码段的作用是将第二个视图框 v2 与第一个视图框 v1 进行关联,这样,当你在X轴方向缩放 v1 的时候,v2 也会进行同样的缩放。但是,由于两个Y轴的缩放因子并不相同,所以当缩放 v1 的时候,两个Y轴的位置就不再对齐。

    解决这个问题的方法是为第二个视图框 v2 设置独立的缩放因子。你可以在代码中添加以下的代码:

    self.v2.enableAutoRange(axis=pg.ViewBox.YAxis, enable=True)
    

    这个代码会将第二个视图框 v2 的Y轴的缩放因子与第一个视图框 v1 的Y轴的缩放因子区分开来,这样,当你在X轴方向缩放 v1 的时候,v2 的Y轴位置也不再随之改变,这就能够确保两个Y轴的位置始终对齐。

    评论
  • GISer Liu 2023-02-12 15:11
    关注

    在 PyQtGraph 中绘制多 Y 轴图形时,如果新添加的 Y 轴(Y2)的坐标刻度与默认 Y 轴(Y1)的坐标刻度不能对齐,您可以使用以下方法解决这个问题:

    1.调整坐标轴长度:可以通过使用 setLength() 方法调整坐标轴长度,使两个 Y 轴的长度相同,从而解决对齐问题。

    # 获取第一个 Y 轴对象
    y1 = pg.PlotItem().getAxis('left')
    # 获取第二个 Y 轴对象
    y2 = pg.PlotItem().getAxis('right')
    # 调整两个 Y 轴的长度
    y2.setLength(y1.length())
    

    2.调整坐标刻度:可以通过使用 setTicks() 方法调整坐标刻度,使两个 Y 轴的坐标刻度相同,从而解决对齐问题。

    # 获取第一个 Y 轴对象
    y1 = pg.PlotItem().getAxis('left')
    # 获取第二个 Y 轴对象
    y2 = pg.PlotItem().getAxis('right')
    # 调整两个 Y 轴的坐标刻度
    y2.setTicks([y1.getTicks()])
    

    这两种方法可以解决 PyQtGraph 中多 Y 轴图形的对齐问题,请按照需要选择使用。

    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 修改了问题 2月14日
  • 创建了问题 2月12日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部