docstr: Draw a series of histograms of the selected keys over different
  training steps.
docstr_tok: ["Draw","a","series","of","histograms","of","the","selected","keys","over","different","training","steps","."]
code: def draw_hist(self, metric, title=""):
      """Draw a series of histograms of the selected keys over different
      training steps.
      """
      # TODO: assert isinstance(list(values.values())[0], np.ndarray)
  
      rows = 1
      cols = 1
      limit = 10  # max steps to show
  
      # We need a 3D projection Subplot, so ignore the one provided to
      # as an create a new one.
      ax = self.figure.add_subplot(self.gs, projection="3d")
      ax.view_init(30, -80)
  
      # Compute histograms
      verts = []
      area_colors = []
      edge_colors = []
      for i, s in enumerate(metric.steps[-limit:]):
          hist, edges = np.histogram(metric.data[-i - 1 :])
          # X is bin centers
          x = np.diff(edges) / 2 + edges[:-1]
          # Y is hist values
          y = hist
          x = np.concatenate([x[0:1], x, x[-1:]])
          y = np.concatenate([[0], y, [0]])
  
          # Ranges
          if i == 0:
              x_min = x.min()
              x_max = x.max()
              y_min = y.min()
              y_max = y.max()
          x_min = np.minimum(x_min, x.min())
          x_max = np.maximum(x_max, x.max())
          y_min = np.minimum(y_min, y.min())
          y_max = np.maximum(y_max, y.max())
  
          alpha = 0.8 * (i + 1) / min(limit, len(metric.steps))
          verts.append(list(zip(x, y)))
          area_colors.append(
              np.array(self.theme["hist_color"] + [alpha])
          )
          edge_colors.append(
              np.array(self.theme["hist_outline_color"] + [alpha])
          )
  
      poly = PolyCollection(
          verts, facecolors=area_colors, edgecolors=edge_colors
      )
      ax.add_collection3d(
          poly, zs=list(range(min(limit, len(metric.steps)))), zdir="y"
      )
  
      ax.set_xlim(x_min, x_max)
      ax.set_ylim(0, limit)
      ax.set_yticklabels(metric.formatted_steps[-limit:])
      ax.set_zlim(y_min, y_max)
      ax.set_title(metric.name)
  
imports: import itertools
  import math
  import numpy
  import matplotlib
  import matplotlib.pyplot
  import IPython.display
  from mpl_toolkits.mplot3d import Axes3D
  from matplotlib.collections import PolyCollection
label_desc: Use image node_id 10 for calling the Canvas obj's underlying member method code with example usage: obj.draw_hist(metric, title) without return types