簡體   English   中英

如何在 pyqtgraph 中啟用圖例和更改樣式?

[英]How to enable legends and change style in pyqtgraph?

使用 pyQt5,我使用 self.graphicsView.clear() 和 self.graphicsView.plot() 函數不斷更新 plot 的數據。

我在創建小部件之前使用命令 pyqtgraph.setConfigOption('background', '#f0f0f0') 更改了背景顏色,但是,這不適用於圖例項。 背景為灰色,圖例顯示為黑色。

如何更改此圖例項的樣式?

我認為我是根據我如何引用每個新的 plot 項目來實現這個錯誤的。 我相信這些需要以某種方式實例化,但是 instance = self.graphicsView.plot(title = "example title") 然后引用 instance.LegendItem 然后使用 HTML 之類的標簽訪問它。 (找不到參考了)

def plotGraph(self, value):
    """
    plots value to graph
    """
    self.graphQueue(self.plotDataBuffer, value)                   #buffered data input, max vals = value
    self.graphicsView.clear()                                     #clear data for continuous plot
    self.graphicsView.addLegend()
    self.graphicsView.plot(self.plotDataBuffer, pen='r', name='Data')   #plot item

注意:這個function是循環調用的

addLengend() 命令每次調用時都會創建一個新的圖例,但是,我的理解是它只創建一次,如果再次調用它,它只引用已經創建的圖例?

那么,我如何正確初始化圖例一次,然后格式化樣式以匹配背景而不是黑色?

簡化示例:

import pyqtgraph as pg
from PyQt5 import QtGui
import numpy as np
import sys

pg.setConfigOption('background', '#f0f0f0')

plotWidget = pg.plot(title="Stackoverflow Simplified Example")

app = QtGui.QApplication(sys.argv)

while(1):
    x = np.arange(50)
    y = np.random.normal(size=(3, 50))
    plotWidget.clear()
    plotWidget.addLegend()
    for i in range(3):
        plotWidget.plot(x, y[i], pen=(i,3), name = "test {}".format(i))
    app.processEvents()

if __name__ == '__main__':
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        app.exec_()  # Start QApplication event loop ***

檢查pyqtgraph LegendItem.py,會發現顏色被硬編碼到paint函數中。 您可以使用用戶定義的函數替換該函數並更改顏色。

import pyqtgraph as pg
from PyQt5 import QtGui
import numpy as np
import sys
import types
pg.setConfigOption('background', '#f0f0f0')

plotWidget = pg.plot(title="Stackoverflow Simplified Example")

app = QtGui.QApplication(sys.argv)
leg = plotWidget.addLegend()

# replace legend paint
def paint(self, p, *args):
   p.setPen(pg.mkPen(255,0,0,100))
   p.setBrush(pg.mkBrush(0,200,0,50))
   p.drawRect(self.boundingRect())
leg.paint = types.MethodType(paint,leg)

plotData = [0]*3
for i in range(3):
   plotData[i] =plotWidget.plot([0],[0], pen=(i,3), name = "test {}".format(i))

while(1):
    x = np.arange(50)
    y = np.random.normal(size=(3, 50))
    for i in range(3):
      plotData[i].setData(x, y[i])
    app.processEvents()

if __name__ == '__main__':
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        app.exec_()  # Start QApplication event loop ***


如果我沒理解錯的話,您想知道如何更改圖例的背景顏色。 或者至少這就是我偶然發現這個問題的方式。

我發現我們可以使用 brush 參數:

plotWidget.addLegend(brush=pg.mkBrush(255, 255, 255, 100))

其中前三個值是您的 RGB 顏色代碼,最后一個數字是確定背景透明度的 alpha 值。 在此示例中,圖例將使用白色、有些透明的背景制作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM