Есть ли способ, чтобы мы могли видеть и работать с результатом графика (фигура и оси), пока процедуры после fig.show()
обрабатываются Python?
Например, при выполнении приведенного ниже кода Python показывает окно рисунка, но не график (он показывает только белый фон, запаздывая) во время обработки цикла for. Только после завершения всего кода я могу увидеть сюжет и интерактивно работать с ним.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1,2,3]); fig.show()
#I want the plot to be visible and explorable,
# while the for loop below is in process (or any other kind of routine)
for i in range(10000):
print(i)
Скриншот результата (вы видите, что график отстает, только пустой белый):
Вы можете использовать комбинацию отдельного процесса Python (через многопроцессорность) и блокирующего поведения plt.show() для достижения желаемого результата:
import matplotlib.pyplot as plt
import time
from multiprocessing import Process
def show_plot(data):
fig, ax = plt.subplots()
ax.plot(data)
plt.show()
def do_calculation():
for i in range(100):
print(i)
time.sleep(0.1)
if __name__ == '__main__':
p = Process(target=show_plot, args=([1,2,3],))
p.start() # start parallel plotting process
do_calculation()
p.join() # the process will terminate once the plot has been closed
sleep
и p.join
на самом деле не нужны, я пробовал.
plt.pause(0.001)
может показать график, пока продолжаются расчеты. Сюжет не будет интерактивным (например, без масштабирования). Обратите внимание, что поведение зависит от среды, в которой вы используете Python.