Я не могу найти способ получить список всех точек ScatterPlotItem в Pyqtgraph - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь получить доступ к списку всех SpotItems объекта ScatterPlotItem в Pyqtgraph, чтобы манипулировать ими по отдельности и изменять их свойства, такие как их цвет или размер, но до сих пор я не нашел способа сделать это,Я могу получить доступ к выбранной точке, подключив 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?

1 Ответ

1 голос
/ 08 ноября 2019

Если вы хотите получить 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_())
...