Me pregunto cómo puede establecer explícitamente el formato de un colorbar objeto en matplotlib

Aquí es un ejemplo de trazado de secuencia de comandos:

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()

que me da una salida como esta:

matplotlib colorbar garrapata etiqueta de formato

Actualmente la colorbar garrapata etiqueta de formato se utiliza la cadena de formato proporcionado anteriormente: cbar_num_format = "%d", pero me gustaría también ajustar el tamaño de fuente y el peso usando:

cbar.ax.set_yticklabels(np.arange(cbar_min, cbar_max+cbar_step, cbar_step), fontsize=16, weight='bold')

…pero cuando hago esto, el aplicado anteriormente formateador de la cadena parece que se vaya y los números están de vuelta en "%0.1f" lugar en el formato de la "%d" que he aplicado anteriormente:

matplotlib colorbar garrapata etiqueta de formato

¿Cómo puedo evitar que esto suceda, o de control de la colorbar garrapata etiquetado de una mejor manera?

InformationsquelleAutor HotDogCannon | 2016-03-01

2 Comentarios

  1. 5

    Una opción es el formato de la ticklabels manualmente. Probablemente hay un mejor camino, pero esto generalmente funciona para mí.

    cbar.ax.set_yticklabels(['{:.0f}'.format(x) for x in np.arange(cbar_min, cbar_max+cbar_step, cbar_step)], fontsize=16, weight='bold')

    Edición:

    Si usted no desea averiguar las garrapatas usted puede utilizar:

    for l in cbar.ax.yaxis.get_ticklabels():
    l.set_weight("bold")
    l.set_fontsize(16)

    Usted puede necesitar llamar draw() si no están debidamente actualizados. Esto puede ser reducido a una camisa con:

    setp(cbar.ax.yaxis.get_ticklabels(), weight='bold', fontsize=16)
    • [‘{:.0f}’.formato(x) para x en … parece que no funciona, pero [(«%d» % x) para x en … no! tal vez es una versión de la diferencia?
    • Puede ser una versión de la diferencia de la versión de python estás usando?
    • yo estoy usando la versión 2.6.6
  2. 2

    Sólo está cambiando a

    cbar.ax.set_yticklabels(np.arange(int(cbar_min), int(cbar_max+cbar_step), int(cbar_step)), fontsize=16, weight='bold')

    hace el truco !!!

    es decir, acaba de dar int() a su np.arange() valores dentro de cbar.ax.set_yticklabels

    matplotlib colorbar garrapata etiqueta de formato

    • que sí funciona, pero me gustaría que ser flexible y tener el formato de una entrada. gracias, aunque!

Dejar respuesta

Please enter your comment!
Please enter your name here