python - 我似乎找不到一种方法来获取 Pyqtgraph 中 ScatterPlotItem 所有点的列表

标签 python python-3.x pyqtgraph

我正在尝试访问 Pyqtgraph 中 ScatterPlotItem 的所有 SpotItems 的列表,以便单独操作它们并更改它们的属性,例如它们的颜色或大小,但到目前为止我还没有找到解决方法。我可以通过将 sigClicked(self,points) 连接到函数来访问单击的点,但我不知道如何获取图中所有点的列表。我尝试过以下方法:

scatter_plot = pyqtgraph.ScatterPlotItem(size=5)
data = scatter_plot.data

for i in data:
  scatter[i].setPen(pyqtgraph.mkPen(cosmetic=True, width=10.5, color=QtGui.QColor(210, 85, 173)), size=10)

这给了我一个错误:

'ScatterPlotItem' object does not support indexing

看起来scatter_plot.data返回点属性的列表,而不是点本身。然而,这不允许我直接操作属性。我可以做这样的事情:

for i in data:
  data[i][0] = 10

这会将数据数组的第零个元素(对应于 x 值)更改为值 10。如何更改 SpotItem 的画笔和画笔?

最佳答案

如果您想获取 SpotItems,则必须使用 Points() 方法:

import random
import sys

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    view = pg.GraphicsLayoutWidget()
    plt = view.addPlot()
    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    y = [10, 8, 6, 4, 2, 20, 18, 16, 14, 12]
    s = pg.ScatterPlotItem(x, y, size=10)
    plt.addItem(s)
    view.show()

    for pt in s.points():
        # random color
        color = QtGui.QColor(*random.sample(range(255), 3))
        pt.setPen(
            pg.mkPen(cosmetic=True, width=10.5, color=color),
            size=10,
        )

    sys.exit(QtGui.QApplication.exec_())

关于python - 我似乎找不到一种方法来获取 Pyqtgraph 中 ScatterPlotItem 所有点的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757533/

相关文章:

python - 如何在 Python 中正确转义 json 字符串中的双引号 (")

python - 在 Python 中从 parent 那里访问 child 的 __dict__?

python-3.x - 如何在 20 秒后重复使用 Pillow 在现有图像上创建新图像?

python - 带有时间表和不同缺失边的 Dijkstra 算法

python - PyQtGraph 的 slider 小部件

python - 我应该在 Python 3.x 的 if 语句中使用 'in' 还是 'or' 来根据多个值检查变量?

python - 如何使用 python 获取给定 url 的原始 html 文本

python - "except Foo as bar"导致 "bar"从范围中删除

ipython - 如何让基本的交互式 pyqtgraph 图在 IPython REPL 或 Jupyter 控制台中工作?

python - 如何在布局中设置正确的列大小 - PySide/PyQt