颜色在 pyqtgraph 中不像在 matplotlib 中那样工作

Posted

技术标签:

【中文标题】颜色在 pyqtgraph 中不像在 matplotlib 中那样工作【英文标题】:Color is not working in pyqtgraph like the way it works in matplotlib 【发布时间】:2020-01-30 04:25:26 【问题描述】:

我有一个 2d numpy 数组,如下所示

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】:

如果你想为每个点设置颜色,你必须传递一个颜色列表,在你的情况下你传递一个列表,如果你想设置边框或 QBrush 的颜色,你必须传递它 QPen如果你想设置填充颜色。

据我了解,你想要最新的:

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)))

【讨论】:

以上是关于颜色在 pyqtgraph 中不像在 matplotlib 中那样工作的主要内容,如果未能解决你的问题,请参考以下文章

在 pyqtgraph 中为条形图设置渐变颜色

表格单元格中不需要的填充

Pyqtgraph & 根据表面图的高度更改颜色

使 UISearchBar 不像在联系人应用程序中那样滚动

Android 应用程序不像在 Android Studio 中那样显示在设备上

如何根据数据获得具有可变颜色和网格的 pyqtgraph plotwidget?