pyqtgraph 散点图项目设置画笔
pyqtgraph scatterplotitem setbrush
我正在尝试通过 setBrush 传递列表参数。
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
app = QtGui.QApplication([])
mw = QtGui.QMainWindow()
mw.resize(800,800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,8,6,4,2,20,18,16,14,12]
s1 = pg.ScatterPlotItem(x,y,size=10, pen=pg.mkPen(None), brush=pg.mkBrush(255, 255, 255, 120))
s1.setBrush(['r']*10, mask=None)
w1.addItem(s1)
mw.show()
当我运行这段代码时,出现如下错误:
Traceback (most recent call last): File "", line 1, in
File
"C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py",
line 467, in setBrush
self.updateSpots(dataSet)
File
"C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py",
line 553, in updateSpots
self.fragmentAtlas.getAtlas() # generate atlas so source widths are available.
File
"C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py",
line 193, in getAtlas
self.buildAtlas()
File
"C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py",
line 143, in buildAtlas
img = renderSymbol(key[0], key[1], sourceRect.pen, sourceRect.brush)
File
"C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py",
line 74, in renderSymbol
drawSymbol(p, symbol, size, pen, brush)
File
"C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py",
line 49, in drawSymbol
painter.setBrush(brush) TypeError: arguments did not match any overloaded call: QPainter.setBrush(QBrush): argument 1 has
unexpected type 'str' QPainter.setBrush(Qt.BrushStyle): argument 1
has unexpected type 'str'
如何通过 setBrush 传递列表?我必须为不同的点分配不同的颜色。
添加s.setBrush(QtGui.QBrush({your parameters}))
例如:
- QtGui.QBrush()
- QtGui.QBrush(Qt.BrushStyle bs)
- QtGui.QBrush(QColor颜色,Qt.BrushStyle风格=Qt.SolidPattern)
- QtGui.QBrush(Qt.GlobalColor颜色,Qt.BrushStyle风格=Qt.SolidPattern)
- QtGui.QBrush(QColor颜色,QPixmap像素图)
- QtGui.QBrush(Qt.GlobalColor颜色,QPixmap像素图)
- QtGui.QBrush(QPixmap 像素图)
- QtGui.QBrush(QImage图片)
- QtGui.QBrush(QGradient渐变)
- QtGui.QBrush(QBrush刷)
- QtGui.QBrush(QVariant 变体)
在您的代码中:
import sys
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
app = QtGui.QApplication(sys.argv)
mw = QtGui.QMainWindow()
mw.resize(800, 800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [10, 8, 6, 4, 2, 20, 18, 16, 14, 12]
# Create seed for the random
time = QtCore.QTime.currentTime()
QtCore.qsrand(time.msec())
for i in range(len(x)):
s = pg.ScatterPlotItem([x[i]], [y[i]], size=10, pen=pg.mkPen(None)) # brush=pg.mkBrush(255, 255, 255, 120))
s.setBrush(QtGui.QBrush(QtGui.QColor(QtCore.qrand() % 256, QtCore.qrand() % 256, QtCore.qrand() % 256)))
w1.addItem(s)
mw.show()
sys.exit(QtGui.QApplication.exec_())
输出:
如果要为前 5 个点 (x: 1-5) 设置红色,为另外 5 个点 (x: 6-10) 设置蓝色
import sys
from pyqtgraph.Qt import QtGui
import pyqtgraph as pg
app = QtGui.QApplication(sys.argv)
mw = QtGui.QMainWindow()
mw.resize(800, 800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [10, 8, 6, 4, 2, 20, 18, 16, 14, 12]
color = QtGui.QColor("#0000FF")
s = pg.ScatterPlotItem(x[:5], y[:5], size=10, pen=pg.mkPen(None), brush='r')
w1.addItem(s)
s = pg.ScatterPlotItem(x[5:], y[5:], size=10, pen=pg.mkPen(None), brush='b')
w1.addItem(s)
mw.show()
sys.exit(QtGui.QApplication.exec_())
如果要更改圆点的颜色,可以将列表传递给 symbolBrush
关键字。您的代码将变为:
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
import time
import sys
app = QtGui.QApplication([])
mw = QtGui.QMainWindow()
mw.resize(800,800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,8,6,4,2,20,18,16,14,12]
brush_list = [pg.mkColor(c) for c in "rgbcmykwrg"]
p1 = w1.plot()
s1 = p1.setData(x=x, y=y, size=10, pen=pg.mkPen(None), brush='g', symbol='o', symbolBrush=brush_list, symbolPen='r')
mw.show()
sys.exit(QtGui.QApplication.exec_())
我需要做 p1 = w1.plot()
才能让它工作,但我对所有 pyqtgraph 对象都不够流利,无法告诉你它的作用。
我必须将颜色字符串(或元组或其他)转换为 pg.mkColor()
对象才能正常工作(尽管文档说不需要)
请注意,brush
关键字会填充图表,直到您指定某个值(例如 x 轴),这对线很有用,但对点不显示任何内容,如您所见在图像中。
symbolPen
关键字可用于点的线条颜色。
我正在尝试通过 setBrush 传递列表参数。
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
app = QtGui.QApplication([])
mw = QtGui.QMainWindow()
mw.resize(800,800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,8,6,4,2,20,18,16,14,12]
s1 = pg.ScatterPlotItem(x,y,size=10, pen=pg.mkPen(None), brush=pg.mkBrush(255, 255, 255, 120))
s1.setBrush(['r']*10, mask=None)
w1.addItem(s1)
mw.show()
当我运行这段代码时,出现如下错误:
Traceback (most recent call last): File "", line 1, in
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 467, in setBrush self.updateSpots(dataSet)
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 553, in updateSpots self.fragmentAtlas.getAtlas() # generate atlas so source widths are available.
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 193, in getAtlas self.buildAtlas()
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 143, in buildAtlas img = renderSymbol(key[0], key[1], sourceRect.pen, sourceRect.brush)
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 74, in renderSymbol drawSymbol(p, symbol, size, pen, brush)
File "C:\Python34\lib\site-packages\pyqtgraph\graphicsItems\ScatterPlotItem.py", line 49, in drawSymbol painter.setBrush(brush) TypeError: arguments did not match any overloaded call: QPainter.setBrush(QBrush): argument 1 has unexpected type 'str' QPainter.setBrush(Qt.BrushStyle): argument 1 has unexpected type 'str'
如何通过 setBrush 传递列表?我必须为不同的点分配不同的颜色。
添加s.setBrush(QtGui.QBrush({your parameters}))
例如:
- QtGui.QBrush()
- QtGui.QBrush(Qt.BrushStyle bs)
- QtGui.QBrush(QColor颜色,Qt.BrushStyle风格=Qt.SolidPattern)
- QtGui.QBrush(Qt.GlobalColor颜色,Qt.BrushStyle风格=Qt.SolidPattern)
- QtGui.QBrush(QColor颜色,QPixmap像素图)
- QtGui.QBrush(Qt.GlobalColor颜色,QPixmap像素图)
- QtGui.QBrush(QPixmap 像素图)
- QtGui.QBrush(QImage图片)
- QtGui.QBrush(QGradient渐变)
- QtGui.QBrush(QBrush刷)
- QtGui.QBrush(QVariant 变体)
在您的代码中:
import sys
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
app = QtGui.QApplication(sys.argv)
mw = QtGui.QMainWindow()
mw.resize(800, 800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [10, 8, 6, 4, 2, 20, 18, 16, 14, 12]
# Create seed for the random
time = QtCore.QTime.currentTime()
QtCore.qsrand(time.msec())
for i in range(len(x)):
s = pg.ScatterPlotItem([x[i]], [y[i]], size=10, pen=pg.mkPen(None)) # brush=pg.mkBrush(255, 255, 255, 120))
s.setBrush(QtGui.QBrush(QtGui.QColor(QtCore.qrand() % 256, QtCore.qrand() % 256, QtCore.qrand() % 256)))
w1.addItem(s)
mw.show()
sys.exit(QtGui.QApplication.exec_())
输出:
如果要为前 5 个点 (x: 1-5) 设置红色,为另外 5 个点 (x: 6-10) 设置蓝色
import sys
from pyqtgraph.Qt import QtGui
import pyqtgraph as pg
app = QtGui.QApplication(sys.argv)
mw = QtGui.QMainWindow()
mw.resize(800, 800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [10, 8, 6, 4, 2, 20, 18, 16, 14, 12]
color = QtGui.QColor("#0000FF")
s = pg.ScatterPlotItem(x[:5], y[:5], size=10, pen=pg.mkPen(None), brush='r')
w1.addItem(s)
s = pg.ScatterPlotItem(x[5:], y[5:], size=10, pen=pg.mkPen(None), brush='b')
w1.addItem(s)
mw.show()
sys.exit(QtGui.QApplication.exec_())
如果要更改圆点的颜色,可以将列表传递给 symbolBrush
关键字。您的代码将变为:
from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
import time
import sys
app = QtGui.QApplication([])
mw = QtGui.QMainWindow()
mw.resize(800,800)
view = pg.GraphicsLayoutWidget()
mw.setCentralWidget(view)
mw.setWindowTitle('pyqtgraph example: ScatterPlot')
w1 = view.addPlot()
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,8,6,4,2,20,18,16,14,12]
brush_list = [pg.mkColor(c) for c in "rgbcmykwrg"]
p1 = w1.plot()
s1 = p1.setData(x=x, y=y, size=10, pen=pg.mkPen(None), brush='g', symbol='o', symbolBrush=brush_list, symbolPen='r')
mw.show()
sys.exit(QtGui.QApplication.exec_())
我需要做 p1 = w1.plot()
才能让它工作,但我对所有 pyqtgraph 对象都不够流利,无法告诉你它的作用。
我必须将颜色字符串(或元组或其他)转换为 pg.mkColor()
对象才能正常工作(尽管文档说不需要)
请注意,brush
关键字会填充图表,直到您指定某个值(例如 x 轴),这对线很有用,但对点不显示任何内容,如您所见在图像中。
symbolPen
关键字可用于点的线条颜色。