pyqtgraph scatterplotitem setbrush

时间:2016-12-09 12:08:56

标签: python pyqtgraph

我试图通过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传递列表?我必须为不同的点分配不同的颜色。

2 个答案:

答案 0 :(得分:1)

添加s.setBrush(QtGui.QBrush({your parameters})) 例如:

  • QtGui.QBrush()
  • QtGui.QBrush(Qt.BrushStyle bs)
  • QtGui.QBrush(QColor color,Qt.BrushStyle style = Qt.SolidPattern)
  • QtGui.QBrush(Qt.GlobalColor color,Qt.BrushStyle style = Qt.SolidPattern)
  • QtGui.QBrush(QColor color,QPixmap pixmap)
  • QtGui.QBrush(Qt.GlobalColor color,QPixmap pixmap)
  • QtGui.QBrush(QPixmap pixmap)
  • QtGui.QBrush(QImage image)
  • QtGui.QBrush(QGradient gradient)
  • 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_())

输出:

enter image description here

如果要为前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_())

enter image description here

答案 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关键字可用于积分的线条颜色。

enter image description here