Цвет не работает в Pyqtgraph, как это работает в Matplotlib - PullRequest
1 голос
/ 01 октября 2019

У меня есть двумерный массив, как показано ниже

import numpy as np
agents = np.array([[  1. , -71.8,  41.2],
       [  1. , -71.8,  41.3],
       [  0. , -71.8,  41.4],
       [  0. , -71.7,  41.4],
       [  0. , -71.6,  41.4]])

Теперь я хочу его визуализировать. В matplotlib я могу сделать что-то подобное, так как мне нужен другой цвет в зависимости от значения первого столбца.

import matplotlib.pyplot as plt
plt.scatter(agents [:,1],agents [:,2],c=agents [:,0])

Но как я могу получить тот же результат в pyqtgraph? Я пытался это

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 = agents[:,1]
y = agents[:,2]
z = agents[:,0]
s = pg.ScatterPlotItem(x, y,pen=pg.mkPen(z))
w1.addItem(s)
mw.show()
sys.exit(QtGui.QApplication.exec_())

Получил это исключение

Exception: Not sure how to make a color from "(array([1., 0., 0., 0.]),)"

1 Ответ

0 голосов
/ 01 октября 2019

Если вы хотите установить цвет для каждой точки, вы должны передать список цветов, в вашем случае вы передаете ему список, вместо этого вы должны передать его QPen, если вы хотите установить цвета границы или QBrushесли вы хотите установить цвет заливки.

Из того, что я понимаю, вам нужны самые последние:

s = pg.ScatterPlotItem(x, y, brush=[pg.mkBrush(v) for v in z])
# or 
# s = pg.ScatterPlotItem(x, y, brush=list(map(pg.mkBrush, z)))

Если вы хотите установить цвет границы, используйте:

s = pg.ScatterPlotItem(x, y, pen=[pg.mkPen(v) for v in z])
# or 
# s = pg.ScatterPlotItem(x, y, pen=list(map(pg.mkPen, z)))
...