PyQtGraph: легенда не работает

Я использую PyQtGraph 0.10 с Py3.6, и у меня возникли проблемы со следующим кодом.
У меня две проблемы:

1) addLegend() на каждом из пяти графиков просто показывает пустой квадратик и

2) команда showLabel(show=False) игнорируется (я просто хочу метку на нижнем графике).

self.win   = pg.GraphicsWindow()
self.win.clear()
for figIdx, devid in enumerate(self.norm_data.keys()):
    plot = self.win.addPlot()
    plot.plot(x=self.norm_time[devid],       y=self.norm_data[devid]      , name=devid         , pen=pg.mkPen('b', width=2), connect="finite")
    plot.plot(x=self.pkt_starts[devid].time, y=self.pkt_starts[devid].data, name="Packet start", pen=None, symbol='x' ,symbolSize=8, symbolPen="c")
    plot.plot(x=self.bad_gaps  [devid].time, y=self.bad_gaps  [devid].data, name="Seq gap"     , pen='r' , symbol=None, connect="finite")
    plot.addLegend()                   # Try to add legend
    plot.setLabel('left', "Data")
    plot.setRange(yRange=[0, 5])
    plot.setRange(xRange=[0, self.time_end])
    lr = pg.LinearRegionItem([5, 10])  # This is a mouse-draggable window on the plot
    lr.setZValue(-10)
    lr.sigRegionChanged.connect(updateRegion)
    self.region_list.append(lr)
    plot.addItem(lr)
    plot.showLabel('bottom',show=False)          # Try to turn of bottom label
    plot.getAxis('bottom').showLabel(show=False) # try again
    self.win.nextRow()

# callback for the linear region item on the plot
def updateRegion(regionItem):
    self.region_low, self.region_high = regionItem.getRegion()

Вот изображение сюжета:

введите здесь описание изображения


person Hephaestus    schedule 13.12.2017    source источник


Ответы (1)


что касается проблемы 1, plot.addLegend() следует добавить перед plot.plot(x,y,name) командами

Что касается проблемы 2, вы очищаете нижние метки для всех графиков. Если вы хотите показать нижнюю метку для последнего графика, сделайте что-то вроде этого:

if (figIdx != len(self.norm_data.keys())): 
    plot.showLabel('bottom',show=False) # For all other plots remove the label
else:
    plot.showLabel('bottom',show=True) # fOR THE LAST PLOT show THE BOTTOM LABEL

Надеюсь, это то, что вы ищете.

person plasmon360    schedule 13.12.2017
comment
Относительно 1: Да, ваша поправка исправила. addLegend() должен быть добавлен перед командой plot. - person Hephaestus; 13.12.2017
comment
Относительно 2: теперь я понимаю, что метка относится не к метке номера оси, а к дескриптору метки. Тогда как удалить номера осей? - person Hephaestus; 13.12.2017
comment
Хорошо. Понятно. Вместо showLabels(show=False) мне понадобился plot.getAxis('bottom').setStyle(showValues=False). Это отключило нумерацию осей. - person Hephaestus; 13.12.2017
comment
если это помогло, проголосуйте/примите ответ. Благодарность! - person plasmon360; 13.12.2017
comment
Что касается того, что addLegend() появляется перед графиками, кажется, эта информация не входит в документацию, так что ваш ответ был очень полезен. - person mins; 06.06.2021