[英]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.