Matplotlib: Especifique el formato de flotadores para tags de tick

Estoy tratando de establecer el formato en dos números decimales en un entorno de subplot matplotlib. Lamentablemente, no tengo ni idea de cómo resolver esta tarea.

Para evitar el uso de la notación científica en el eje y, utilicé ScalarFormatter(useOffset=False) como se puede ver en mi fragmento de código a continuación. Creo que mi tarea debería resolverse pasando más opciones / argumentos al formateador utilizado. Sin embargo, no pude encontrar ninguna pista en la documentación de matplotlib.

¿Cómo puedo establecer dos dígitos decimales o ninguno (se necesitan ambos casos)? No puedo proporcionar datos de muestra, desafortunadamente.


– SNIPPET –

 f, axarr = plt.subplots(3, sharex=True) data = conv_air x = range(0, len(data)) axarr[0].scatter(x, data) axarr[0].set_ylabel('$T_\mathrm{air,2,2}$', size=FONT_SIZE) axarr[0].yaxis.set_major_locator(MaxNLocator(5)) axarr[0].yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) axarr[0].tick_params(direction='out', labelsize=FONT_SIZE) axarr[0].grid(which='major', alpha=0.5) axarr[0].grid(which='minor', alpha=0.2) data = conv_dryer x = range(0, len(data)) axarr[1].scatter(x, data) axarr[1].set_ylabel('$T_\mathrm{dryer,2,2}$', size=FONT_SIZE) axarr[1].yaxis.set_major_locator(MaxNLocator(5)) axarr[1].yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) axarr[1].tick_params(direction='out', labelsize=FONT_SIZE) axarr[1].grid(which='major', alpha=0.5) axarr[1].grid(which='minor', alpha=0.2) data = conv_lambda x = range(0, len(data)) axarr[2].scatter(x, data) axarr[2].set_xlabel('Iterationsschritte', size=FONT_SIZE) axarr[2].xaxis.set_major_locator(MaxNLocator(integer=True)) axarr[2].set_ylabel('$\lambda$', size=FONT_SIZE) axarr[2].yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) axarr[2].yaxis.set_major_locator(MaxNLocator(5)) axarr[2].tick_params(direction='out', labelsize=FONT_SIZE) axarr[2].grid(which='major', alpha=0.5) axarr[2].grid(which='minor', alpha=0.2) 

Related of "Matplotlib: Especifique el formato de flotadores para tags de tick"

Ver la documentación relevante en general y específicamente.

 from matplotlib.ticker import FormatStrFormatter fig, ax = plt.subplots() ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f')) 

introduzca la descripción de la imagen aquí

La respuesta anterior es probablemente la forma correcta de hacerlo, pero no funcionó para mí.

La forma hacky que me lo resolvió fue la siguiente:

 ax =  # get the current labels labels = [item.get_text() for item in ax.get_xticklabels()] # Beat them into submission and set them back again ax.set_xticklabels([str(round(float(label), 2)) for label in labels]) # Show the plot, and go home to family plt.show() 

Si está trabajando directamente con la pirplota de matplotlib (plt) y está más familiarizado con la cadena de formato de nuevo estilo, puede intentar esto:

 from matplotlib.ticker import StrMethodFormatter plt.gca().yaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}')) # No decimal places plt.gca().yaxis.set_major_formatter(StrMethodFormatter('{x:,.2f}')) # 2 decimal places 

De la documentación :

clase matplotlib.ticker.StrMethodFormatter (fmt)

Utilice una cadena de formato de estilo nuevo (como la utiliza str.format ()) para dar formato a la marca.

El campo utilizado para el valor debe estar etiquetado como x y el campo utilizado para la posición debe estar etiquetado pos.