Цвет Pyqtgraph указывает c регионов на участке - PullRequest
0 голосов
/ 24 апреля 2020

До сих пор я использовал matplotlib.collections, и было довольно просто пометить коллекцию другим цветом.

Мой текущий проект требует, чтобы я использовал pyqtgraph для того же.

self.plot = pg.PlotWidget()
layout.addWidget(self.plot)

Если индекс i массива bool равен true, то соответствующий индекс i float должен быть окрашен (вертикальные или прерывистые горизонтальные полосы).

Пример:

y = [50, 100, 50, 250, 150]
x = [1, 5, 87, 92, 106]
b = [False, False, True, False, True]

После построения графика 87 и 106 должны быть выделены через вертикальные полосы над осью X некоторым цветом или отметкой. Есть намеки?

1 Ответ

0 голосов
/ 28 апреля 2020

Я не совсем понимаю, какую визуализацию вы имеете в виду, но вот несколько вариантов для маркировки выбранных вами точек:

  1. Используйте один экземпляр pg.VTickGroup для рисования тиков вдоль оси x
  2. Используйте множество экземпляров pg.InfiniteLine для рисования линий и других маркирующих фигур

Пример:

import pyqtgraph as pg
import numpy as np

plt = pg.plot()

y = [50, 100, 50, 250, 150]
x = [1, 5, 87, 92, 106]
b = [False, False, True, False, True]

# draw a scatter plot with selected points in yellow
cmap = {False: (0, 0, 200), True: (255, 255, 0)}
brushes = [pg.mkBrush(cmap[x]) for x in b]
plt.plot(x, y, pen=None, symbol='o', symbolBrush=brushes)

# draw vertical ticks marking the position of selected points
tick_x = np.array(x)[b]
ticks = pg.VTickGroup(tick_x, yrange=[0, 0.1], pen={'color': 'w', 'width': 5})
plt.addItem(ticks)

# add a vertical line with marker at the bottom for each selected point
for tx in tick_x:
    l = plt.addLine(x=tx, pen=(50, 150, 50), markers=[('^', 0, 10)])
...