Как я могу построить в режиме реального времени в Jupyter - PullRequest
1 голос
/ 31 января 2020

Когда я заполняю массив в jupyter последовательно l oop и печатаю массив по мере его роста с помощью инструкции plt.plot, я могу получить распечатку из массивов индивидуально, но только с одним графиком.

import numpy as np
import matplotlib.pyplot as plt
import time
muarr = np.linspace(0,10,10)
print('muarray')
print(muarr)

z = np.linspace(0.0,1.0,10)  # create an array
print('array z')
print(z)

def fillit(mu):
    x = 10  # initial x value
    for i in range(0,10):   # fill n2-n1 iterations
        z[i] = i * x * mu
    return z  # returning the array

for i in range(0,10):  
        mu = muarr[i]          #for a specific horizontal axis location
        print()
        print('iteration '+ str(i))
        print('muarray '+str(i))
        print('mu = '+str(mu))
        y=fillit(mu)  # an array of 10 elements from 0 to 100*mu
        print('array y is an array of 10 elements from 0 to 100*mu')
        print (y)
        x=y*0.0 + mu   # dummy x value is all mu 
        print('array x is just all mu so that each x,y pt can be plotted')
        print (x)
        plt.plot(x,y,'ko',markersize=1)   # k=black, plot small points

У меня нет проблем в режиме реального времени с консоли, как показано здесь , но в jupyter это тоже не работает. Когда я запускаю этот код как скрипт python из терминала, массивы распечатываются, но вообще не отображаются.

Я бы хотел, чтобы график обновлялся в реальном времени по мере генерирования данных. Возможно ли это в Юпитере?

1 Ответ

1 голос
/ 31 января 2020

РЕДАКТИРОВАТЬ: Добавлено другое решение. Оп в комментариях ..

спасибо за ваш ответ. Тем не менее, размещение plot.show () там, где вы его поместили, создает только 10 отдельных графиков, а не данные о последовательных итерациях, появляющихся на одном графике

Здесь это правильное решение для ноутбуков Jupyter.

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import time


muarr = np.linspace(0,10,10)
print('muarray')
print(muarr)

z = np.linspace(0.0,1.0,10)  # create an array
print('array z')
print(z)

def fillit(mu):
    x = 10  # initial x value
    for i in range(0,10):   # fill n2-n1 iterations
        z[i] = i * x * mu
    return z  # returning the array

fig = plt.figure()
ax = fig.add_subplot(111)
plt.ion()

fig.show()
fig.canvas.draw()

for i in range(0,10):  
        mu = muarr[i]          #for a specific horizontal axis location
        print()
        print('iteration '+ str(i))
        print('muarray '+str(i))
        print('mu = '+str(mu))
        y=fillit(mu)  # an array of 10 elements from 0 to 100*mu
        print('array y is an array of 10 elements from 0 to 100*mu')
        print (y)
        x=y*0.0 + mu   # dummy x value is all mu 
        print('array x is just all mu so that each x,y pt can be plotted')
        print (x)
        ax.plot(x,y,'ko',markersize=1)
        fig.canvas.draw()
        time.sleep(1)

Если вам нужен график для каждой итерации, вы должны добавить plt.show () в конце для l oop, после plt.plot:

for i in range(0,10):  
        mu = muarr[i]          #for a specific horizontal axis location
        print()
        print('iteration '+ str(i))
        print('muarray '+str(i))
        print('mu = '+str(mu))
        y=fillit(mu)  # an array of 10 elements from 0 to 100*mu
        print('array y is an array of 10 elements from 0 to 100*mu')
        print (y)
        x=y*0.0 + mu   # dummy x value is all mu 
        print('array x is just all mu so that each x,y pt can be plotted')
        print (x)
        plt.plot(x,y,'ko',markersize=1)   # k=black, plot small points
        plt.show()

Ответ, который вы связываете, добавляет plt.show () после l oop, поэтому он покажет только последний созданный plt.plot (). На самом деле, связанный вопрос - это то, что вам может понадобиться, потому что jupyter и Terminal работают немного по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...