code: def bullseye_plot(ax, data, seg_bold=None, cmap="viridis", norm=None):
      """
      Bullseye representation for the left ventricle.
  
      Parameters
      ----------
      ax : Axes
      data : list[float]
          The intensity values for each of the 17 segments.
      seg_bold : list[int], optional
          A list with the segments to highlight.
      cmap : colormap, default: "viridis"
          Colormap for the data.
      norm : Normalize or None, optional
          Normalizer for the data.
  
      Notes
      -----
      This function creates the 17 segment model for the left ventricle according
      to the American Heart Association (AHA) [1]_
  
      References
      ----------
      .. [1] M. D. Cerqueira, N. J. Weissman, V. Dilsizian, A. K. Jacobs,
          S. Kaul, W. K. Laskey, D. J. Pennell, J. A. Rumberger, T. Ryan,
          and M. S. Verani, "Standardized myocardial segmentation and
          nomenclature for tomographic imaging of the heart",
          Circulation, vol. 105, no. 4, pp. 539-542, 2002.
      """
  
      data = np.ravel(data)
      if seg_bold is None:
          seg_bold = []
      if norm is None:
          norm = mpl.colors.Normalize(vmin=data.min(), vmax=data.max())
  
      r = np.linspace(0.2, 1, 4)
  
      ax.set(ylim=[0, 1], xticklabels=[], yticklabels=[])
      ax.grid(False)  # Remove grid
  
      # Fill segments 1-6, 7-12, 13-16.
      for start, stop, r_in, r_out in [
          (0, 6, r[2], r[3]),
          (6, 12, r[1], r[2]),
          (12, 16, r[0], r[1]),
          (16, 17, 0, r[0]),
      ]:
          n = stop - start
          dtheta = 2 * np.pi / n
          ax.bar(
              np.arange(n) * dtheta + np.pi / 2,
              r_out - r_in,
              dtheta,
              r_in,
              color=cmap(norm(data[start:stop])),
          )
  
      # Now, draw the segment borders.  In order for the outer bold borders not
      # to be covered by inner segments, the borders are all drawn separately
      # after the segments have all been filled.  We also disable clipping, which
      # would otherwise affect the outermost segment edges.
      # Draw edges of segments 1-6, 7-12, 13-16.
      for start, stop, r_in, r_out in [
          (0, 6, r[2], r[3]),
          (6, 12, r[1], r[2]),
          (12, 16, r[0], r[1]),
      ]:
          n = stop - start
          dtheta = 2 * np.pi / n
          ax.bar(
              np.arange(n) * dtheta + np.pi / 2,
              r_out - r_in,
              dtheta,
              r_in,
              clip_on=False,
              color="none",
              edgecolor="k",
              linewidth=[
                  4 if i + 1 in seg_bold else 2
                  for i in range(start, stop)
              ],
          )
      # Draw edge of segment 17 -- here; the edge needs to be drawn differently,
      # using plot().
      ax.plot(
          np.linspace(0, 2 * np.pi),
          np.linspace(r[0], r[0]),
          "k",
          linewidth=(4 if 17 in seg_bold else 2),
      )
  
imports: import matplotlib.pyplot
  import numpy
  import matplotlib
label_desc: Use image node_id 1 for calling a global function with example usage: bullseye_plot(ax, data, seg_bold, cmap, norm) without return types