def nicecolorbar(self,
axcb=None,
reflevel=None,
label=None,
vmax=None,
vmin=None,
data=None,
loc='head right',
fontsize=8,
ticks = None):
if not axcb:
axcb = matplotlib.pyplot.gca()
divider = make_axes_locatable(axcb)
# this code is from
# http://matplotlib.org/mpl_toolkits/axes_grid/users/overview.html#axes-grid1
cax = divider.append_axes("right", size="2%", pad=0.15)
levels = numpy.asarray([0.001,0.0025,0.005,0.01,0.025,0.05,0.1,0.25,0.5,1,2.5,5,10,25,50,100,250,500,1000])
if vmax!= None and vmin != None:
level = levels[numpy.nanargmin(abs((vmax - vmin)/5 - levels))]
ticks = numpy.arange(vmin, vmax, level)
elif vmax :
level = levels[numpy.nanargmin(abs((vmax - numpy.nanmin(data))/5 - levels))]
ticks = numpy.arange(numpy.nanmin(data), vmax, level)
elif data is not None:
level = None #levels[numpy.nanargmin(abs((numpy.nanmax(data) - numpy.nanmin(data))/5 - levels))]
ticks = None #numpy.arange(numpy.nanmin(data), numpy.nanmax(data), level)
#ticks -= numpy.nanmin(abs(ticks))
cb = matplotlib.pyplot.colorbar(self,
cax=cax,
label=label,
orientation='vertical',
extend='both',
spacing='uniform',
ticks=ticks)
if vmax!= None and vmin != None:
#print(ticks,vmin,vmax)
cb.set_clim(vmin, vmax)
cb.ax.yaxis.set_ticks_position('right')
cb.ax.yaxis.set_label_position('right')
cb.ax.set_yticklabels(cb.ax.get_yticklabels(), rotation='vertical',fontsize=fontsize)
#if reflevel:
# cb.ax.axhline((reflevel-min(cb.get_clim()))/numpy.diff(cb.get_clim()),zorder=999,color='k',linewidth=2)
return cb
评论列表
文章目录