Я прочитал много вопросов переполнения стека по этим темам, но после большого эксперимента я не могу понять свою проблему.PyCharm matplotlib интерактивные фигуры без блокировки исполнения
Я использую PyCharm 2016.3.2 для Windows 7 (но у меня такая же проблема на OSX), мой интерпретатор - это последняя версия Anaconda с Python 3.6 и matplotlib 2.0.0.
Вот что я пытаюсь достичь (и, возможно, я не использую правильный подход, потому что я пытаюсь воссоздать поведение я использовать в Octave/Matlab):
- земля одна фигура в всплывающие окна
- Pause мой сценарий (вход («нажмите клавишу для продолжения»))
- Обратите внимание на цифру, а затем нажмите клавишу, чтобы продолжить сценарий
- Compute что-то другое
- Plot новые данные по тем же цифра
- Pause мой сценарий (вход («нажмите клавишу для продолжения»))
- Обратите внимание на цифру, а затем нажмите клавишу, чтобы продолжить сценарий
Вот мой тестовый код:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
print('Plotting Data...')
plt.ion()
plt.figure(1)
plt.plot([1, 5, 10, 20], [1, 5, 10, 20])
plt.xlabel('x label')
plt.ylabel('y label')
plt.show()
plt.pause(0.0001)
input('Plotting Data done..., Press a key to continue')
plt.figure(1)
plt.plot([1, 5, 10, 20], [2, 10, 20, 40])
plt.show()
plt.pause(0.0001)
input('Program paused. Press enter to end.\n')
Это самая близкая версия того, что я хочу, графики правильные, но не реагирующие, когда я курю над ними (plt.pause (0.0001) генерирует предупреждение, но работает код).
Я много играл с параметрами (plt.ion(); plt.pause(); plt.show (block = False)). В большинстве случаев это приводило к пустым окнам окна или мне нужно было закрыть окно, чтобы продолжить выполнение.
Благодарим за помощь!
Вы не можете работать в двух разных циклах событий одновременно. Почему вы не можете просто построить все обычным способом и использовать закрытие окна в качестве триггера для продолжения программы? – ImportanceOfBeingErnest
Обычный способ? Если я использую закрытие окон в качестве триггера для продолжения, даже когда я помню цифру (1), я не могу найти способ построить второй элемент поверх 1-го (без повтора plt.plot с первый набор данных). Но иногда я просто хочу сделать несколько сюжетов и дать им все открыть до конца исполнения. Спасибо! – Capy
@ImportanceOfBeingErnest Этот пост просматривает ту же проблему [аналогичный вопрос] (http://stackoverflow.com/questions/28269157/plotting-in-a-non-blocking-way-with-matplotlib), и он в основном использует тот же обходной путь с паузой (цифры правильно построены, но не отвечают) – Capy