Как создать несколько фигур, не показывая их до вызова plt.show?

Я хотел бы иметь возможность независимо создавать несколько фигур с разными графиками и выбирать, будут ли они отображаться в графическом интерфейсе и или вместо этого сохраняться с использованием функции plt.savefig(). (В большинстве случаев я думаю, что я хочу, чтобы все они отображались И сохранялись, или ни один не отображался, только сохраненные)

Я пытаюсь создать функцию с именем plotData(channel, refFile), которая передает пару параметров, создает фигуру matplotlib и отображает на ней некоторые данные. Я не хочу, чтобы этот рисунок отображался до тех пор, пока я не вызову другую функцию showPlot(channel), которая при вызове покажет соответствующий рисунок.

К сожалению, всякий раз, когда я использую функцию plt.figure (), она автоматически отображает цифру. Я видел ответы на подобные вопросы, когда люди пробовали что-то вроде plt.figure(visible=False) или plt.figure('visibility', 'off'), но ни один из них не помог мне.

def plotData(self, chan, refFile):

    #create figure without showing the gui window
    self.figure[chan-1]=plt.figure()

    #plot data to graph
    sigPlot, =plt.plot(self.time[chan-1],self.yAxis[chan-1], label='Measured Signal')
    refPlot,= plt.plot(self.time[chan-1],self.refSig[chan-1], label='Reference Signal')
    plt.legend(handles=[sigPlot, refPlot])

def showPlot(self,chan):
    self.figure[chan-1].show()


def savePlot(self, filename):
    plt.savefig(filename, bbox_inches='tight')

Также как мне сохранить конкретный сюжет? Я не возражаю, если мне всегда нужно просто вызывать функцию сохранения графика графика перед созданием того же графика.


person generic purple turtle    schedule 06.04.2019    source источник


Ответы (1)


IIUC, вы можете использовать plt.ioff() изначально для выключения интерактивного режима.

После этого вы можете plt.savefig() создать свою фигуру после ее создания с вызовом plt.show() до или без него. И затем вы можете закрыть его через plt.close(), независимо от того, был ли он показан ранее или невидимо сохранен в файл (или даже создан без отображения или сохранения ...)

person SpghttCd    schedule 06.04.2019
comment
Спасибо! Вы знаете, есть ли способ приостановить сценарий до конца, пока цифры не сомкнутся? Я почти уверен, что такое поведение я видел обычно. Я рисую эти цифры в тестовом скрипте pytest, я не знаю, меняет ли это что-то. Я попытался снова включить интерактивный режим в конце с помощью plt.ion (), но это не сработало. - person generic purple turtle; 07.04.2019
comment
@genericpurpleturtle Думаю, я не совсем понимаю, чего вы пытаетесь достичь и как. До сих пор я не работал с pytest, но сомневаюсь, что это повлияет на вашу цель. Однако вы работаете в среде IDE, например, Спайдер? Например. если я запускаю сценарий в Spyder, создающий некоторые (в конечном итоге невидимые) фигуры, у меня все еще есть доступ к ним в моей связанной консоли. - person SpghttCd; 08.04.2019
comment
Я работаю в версии сообщества Visual Studio 2017. Я в основном хочу, чтобы сценарий приостанавливался, пока рисунок не будет закрыт. Я думаю, что plot.show(block=True), похоже, работает, приостанавливает скрипт, но затем он вылетает, когда я закрываю окно. Тем не менее, он работает, как ожидалось, когда я запускаю его из командной строки. Кажется, проблема с визуальной студией. - person generic purple turtle; 14.04.2019