我试图通过setBrush传递list参数。
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()
当我运行此代码时,我收到如下错误:
回溯(最近一次呼叫最后一次):文件"",第1行,
文件 " C:\ Python34 \ lib中\站点包\ pyqtgraph \ graphicsItems \ ScatterPlotItem.py&#34 ;, 第467行,在setBrush中 self.updateSpots(dataSet)
文件 " C:\ Python34 \ lib中\站点包\ pyqtgraph \ graphicsItems \ ScatterPlotItem.py&#34 ;, 第553行,在updateSpots中 self.fragmentAtlas.getAtlas()#generate atlas所以源宽度可用。
文件 " C:\ Python34 \ lib中\站点包\ pyqtgraph \ graphicsItems \ ScatterPlotItem.py&#34 ;, 第193行,在getAtlas中 self.buildAtlas()
文件 " C:\ Python34 \ lib中\站点包\ pyqtgraph \ graphicsItems \ ScatterPlotItem.py&#34 ;, 第143行,在buildAtlas img = renderSymbol(key [0],key [1],sourceRect.pen,sourceRect.brush)
文件 " C:\ Python34 \ lib中\站点包\ pyqtgraph \ graphicsItems \ ScatterPlotItem.py&#34 ;, 第74行,在renderSymbol中 drawSymbol(p,符号,大小,笔,画笔)
文件 " C:\ Python34 \ lib中\站点包\ pyqtgraph \ graphicsItems \ ScatterPlotItem.py&#34 ;, 第49行,在drawSymbol中 painter.setBrush(brush)TypeError:arguments与任何重载调用都不匹配:QPainter.setBrush(QBrush):参数1有 意想不到的类型' str' QPainter.setBrush(Qt.BrushStyle):参数1 有意想不到的类型' str'
如何通过setBrush传递列表?我必须为不同的点分配不同的颜色。
答案 0 :(得分:1)
添加s.setBrush(QtGui.QBrush({your parameters}))
例如:
在您的代码中:
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_())
答案 1 :(得分:1)
如果您想更改点的颜色,可以将列表传递给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
关键字可用于积分的线条颜色。