title: matplotlib colorbar tick label formatting
body: <p>I am wondering how I can explicitly set the format of a colorbar object in matplotlib</p>
  
  <p>Here is an example plotting script:</p>
  
  <pre><code>from matplotlib import pyplot
  from matplotlib.ticker import MultipleLocator, FormatStrFormatter
  from matplotlib.colors import BoundaryNorm
  from matplotlib.ticker import MaxNLocator
  from pylab import *
  import numpy as np
  import random
  
  # ----------
  
  plot_aspect = 1.2
  plot_height = 10.0
  plot_width = int(plot_height*plot_aspect)
  
  # ----------
  
  pyplot.figure(figsize=(plot_width, plot_height), dpi=100)
  pyplot.subplots_adjust(left=0.10, right=1.00, top=0.90, bottom=0.06, hspace=0.30)
  subplot1 = pyplot.subplot(111)
  
  # ----------
  
  cbar_max = 40.0
  cbar_min = 20.0
  cbar_step = 1.0
  cbar_num_colors = 200
  cbar_num_format = "%d"
  
  # ----------
  # make random dataset
  
  dx, dy = 5.0, 5.0
  y, x = np.mgrid[slice(-100.0, 100.0 + dy, dy),slice(-100.0, 100.0 + dx, dx)]
  
  z = []
  for i in x:
      z.append([])
      for j in y:
          z[-1].append(random.uniform(cbar_min,cbar_max))
  
  # ----------
  # make random dataset
  
  levels = MaxNLocator(nbins=cbar_num_colors).tick_values(cbar_min, cbar_max)
  cmap = pyplot.get_cmap('gist_ncar')
  norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
  pp = pyplot.contourf(x,y,z,levels=levels,cmap=cmap)
  cbar = pyplot.colorbar(pp, orientation='vertical', ticks=np.arange(cbar_min, cbar_max+cbar_step, cbar_step), format=cbar_num_format)
  cbar.ax.set_ylabel('Color Scale [unit]', fontsize = 16, weight="bold")
  
  CS = pyplot.contour(x,y,z, alpha=0.5)
  
  majorLocator1   = MultipleLocator(10)
  majorFormatter1 = FormatStrFormatter('%d')
  minorLocator1   = MultipleLocator(5)
  
  subplot1.xaxis.set_major_locator(majorLocator1)
  subplot1.xaxis.set_major_formatter(majorFormatter1)
  subplot1.xaxis.set_minor_locator(minorLocator1)
  
  pyplot.xticks(fontsize = 16)
  pyplot.xlim(-100.0,100.0)
  
  majorLocator2   = MultipleLocator(10)
  majorFormatter2 = FormatStrFormatter('%d')
  minorLocator2   = MultipleLocator(5)
  
  subplot1.yaxis.set_major_locator(majorLocator2)
  subplot1.yaxis.set_major_formatter(majorFormatter2)
  subplot1.yaxis.set_minor_locator(minorLocator2)
  
  pyplot.yticks(fontsize = 16)
  pyplot.ylim(-100.0,100.0)
  
  subplot1.xaxis.grid()
  subplot1.yaxis.grid()
  subplot1.axes.set_aspect('equal')
  
  pyplot.suptitle('Main Title', fontsize = 24, weight="bold")
  
  pyplot.xlabel('X [unit]', fontsize=16, weight="bold")
  pyplot.ylabel('Y [unit]', fontsize=16, weight="bold")
  
  pyplot.show()
  pyplot.close()
  </code></pre>
  
  <p>which gives me output like this:</p>
  
  <p><a href="https://i.stack.imgur.com/YtCTV.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/YtCTV.jpg" alt="enter image description here"></a></p>
  
  <p>Currently the colorbar tick label formatting will use the format string provided  earlier: <code>cbar_num_format = "%d"</code>, but I'd like to also set the font size and weight using:</p>
  
  <pre><code>cbar.ax.set_yticklabels(np.arange(cbar_min, cbar_max+cbar_step, cbar_step), fontsize=16, weight='bold')
  </code></pre>
  
  <p>...but when I do this, the previously applied formatter string seems to go away and the numbers are back in <code>"%0.1f"</code> format instead of the <code>"%d"</code> that I applied earlier:</p>
  
  <p><a href="https://i.stack.imgur.com/pEtTl.jpg" rel="noreferrer"><img src="https://i.stack.imgur.com/pEtTl.jpg" alt="enter image description here"></a></p>
  
  <p>How can I prevent this from happening or control the colorbar tick labeling in a better way?</p>