Как создать живой сюжет matplotlib.pyplot в Google Colab? - PullRequest
0 голосов
/ 30 апреля 2020

К сожалению, невозможно создать живые графики в блокноте Google Colab с помощью %matplotlib notebook, как в автономном блокноте Jupyter на моем P C.

Я нашел два похожих вопроса, отвечающих на вопросы: добиться этого для сюжетных графиков ( link_1 , link_2 ). Однако мне не удается адаптировать его к matplotlib или я не знаю, возможно ли это вообще.

Ниже приведен код из этого урока: Ссылка на GitHub . В частности, я хотел бы запустить этот код, который создает обратный вызов, отображающий вознаграждение за шаг по этапам обучения:

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


class PlottingCallback(BaseCallback):
    """
    Callback for plotting the performance in realtime.

    :param verbose: (int)
    """
    def __init__(self, verbose=1):
        super(PlottingCallback, self).__init__(verbose)
        self._plot = None

    def _on_step(self) -> bool:
        # get the monitor's data
        x, y = ts2xy(load_results(log_dir), 'timesteps')
      if self._plot is None: # make the plot
          plt.ion()
          fig = plt.figure(figsize=(6,3))
          ax = fig.add_subplot(111)
          line, = ax.plot(x, y)
          self._plot = (line, ax, fig)
          plt.show()
      else: # update and rescale the plot
          self._plot[0].set_data(x, y)
          self._plot[-2].relim()
          self._plot[-2].set_xlim([self.locals["total_timesteps"] * -0.02, 
                                   self.locals["total_timesteps"] * 1.02])
          self._plot[-2].autoscale_view(True,True,True)
          self._plot[-1].canvas.draw()

# Create log dir
log_dir = "/tmp/gym/"
os.makedirs(log_dir, exist_ok=True)

# Create and wrap the environment
env = make_vec_env('MountainCarContinuous-v0', n_envs=1, monitor_dir=log_dir)

plotting_callback = PlottingCallback()

model = PPO2('MlpPolicy', env, verbose=0)
model.learn(20000, callback=plotting_callback)
...