plotWidget 不显示正确的标签

Posted

技术标签:

【中文标题】plotWidget 不显示正确的标签【英文标题】:plotWidget doesn't display proper labels 【发布时间】:2021-12-04 11:12:35 【问题描述】:

在我的“UI-pyqtgraph”应用程序中,我的标签无法正确显示在图上。我尝试了几种不同的技巧,但我显然误用了 plotWidget/pyqtgaph 组合。你能告诉我有什么问题吗?

例如,这是一个显示 2 条曲线(十字和点)的玩具代码。为什么我的标签“结果编号 1”和“结果编号 2”没有显示?

import numpy as np
from pyqtgraph.Qt import QtGui, uic

uifilename = 'testUI211014.ui'
form_class = uic.loadUiType(uifilename)[0]

class MyWindowClass(QtGui.QMainWindow, form_class):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setupUi(self)

if __name__ == '__main__':
    app = QtGui.QApplication([])
    win = MyWindowClass()

    x = np.arange(10)
    y1 = x**1.5
    y2 = x**2
    win.graphicsView.plot(x,y1, label='result number 1',symbol='x')
    win.graphicsView.plot(x,y2, label='result number 2',symbol='o')
    win.graphicsView.setLabel('bottom', text='x')
    win.graphicsView.setLabel('left', text='y')
    win.show()

    app.exec_()

这给出: 没有显示标签...

我希望能像通常的标签一样,在框架内以可读且大小合理的文本对常规标签进行抽样和评论。例如像 matplotlib 版本:


我发现如果我使用“labelItem”,例如,在“win.show()”之前插入 3 行:

import pyqtgraph as pg
labelValue = pg.LabelItem('result number 1')
win.graphicsView.addItem(labelValue)

然后出现“结果编号 1”,但巨大、颠倒、未加框且未采样。像那样:


文件'testUI211014.ui'只是主窗口中的一个plotWidget:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="PlotWidget" name="graphicsView">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>20</y>
      <width>671</width>
      <height>471</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>42</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <customwidgets>
  <customwidget>
   <class>PlotWidget</class>
   <extends>QGraphicsView</extends>
   <header>pyqtgraph</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

10 月 18 日(2021 年)星期一上午 10:30 更新:

似乎可能存在版本控制问题,因为我上面的描述是在以前使用 python 3.5 的项目的框架中进行的。当我在 python 3.9 环境中运行这些玩具代码时,我什么也没有显示(甚至曲线也没有)......怎么了?


11 月 2 日上午 10 点更新

    我忘了说通常的 addLegend() 命令,比如在 matplotlib 或下面的答案中,不起作用(没有显示,没有消息,什么都没有......)

    删除线后一切正常:

    win.graphicsView.plot(x,y1, label='结果编号1',symbol='x') win.graphicsView.plot(x,y2, label='result number 2',symbol='o')

并添加:

c1 = win.graphicsView.plot(x,y1,symbol='x')
c2 = win.graphicsView.plot(x,y2,symbol='o')
import pyqtgraph as pg
legend = pg.LegendItem((80, 60), offset=(70, 20))
legend.setParentItem(win.graphicsView.graphicsItem())
legend.addItem(c1, 'result number 1')
legend.addItem(c2, 'result number 2')

就在show() 之前。我想知道为什么addLegend() 没用...

但是提出的主要问题已经解决,因为我可以显示我的标签。

【问题讨论】:

【参考方案1】:

OP 想要展示传奇,因此他必须:

使用 addLegend() 方法 通过 name 属性设置文本。
if __name__ == "__main__":
    app = QtGui.QApplication([])
    win = MyWindowClass()

    x = np.arange(10)
    y1 = x ** 1.5
    y2 = x ** 2
    win.graphicsView.addLegend()
    win.graphicsView.plot(x, y1, name="result number 1", symbol="x")
    win.graphicsView.plot(x, y2, name="result number 2", symbol="o")
    win.graphicsView.setLabel("bottom", text="x")
    win.graphicsView.setLabel("left", text="y")
    win.show()

    app.exec_()

【讨论】:

我必须玩它:使用python 3.5,我仍然得到没有任何标签的情节;使用 python 3.9 我仍然一无所获...... @Stéphane 你用的是什么版本的 PyQt5 和 pyqtgraph?

以上是关于plotWidget 不显示正确的标签的主要内容,如果未能解决你的问题,请参考以下文章

在 PlotWidget 中添加自定义标签

标签显示不正确

标签显示不正确

如何调整 PlotWidget 的高度?

试图在 PyQt5 中的 pyqtgraph plotwidget 中获取坐标显示的光标

如何在 PlotWidget 内制作标签?