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 不显示正确的标签的主要内容,如果未能解决你的问题,请参考以下文章