xticks ticks tick set_yticks number minor python python-3.x matplotlib scipy

python - ticks - Matplotlib: especifique el formato de los flotadores para las etiquetas de marca



ticks size python (4)

Consulte la documentación relevante en general y specifically

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

Estoy tratando de establecer el formato en dos números decimales en un entorno de subtrama matplotlib. Desafortunadamente, no tengo 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 puede ver en mi fragmento 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)? Por desgracia, no puedo proporcionar datos de muestra.

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


En matplotlib 3.1, también puede usar ticklabel_format . Para evitar la notación científica sin compensaciones:

plt.gca().ticklabel_format(axis=''both'', style=''plain'', useOffset=False)


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

La manera hacky que lo resolvió para mí fue la siguiente:

ax = <whatever your plot is> # 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 pyplot (plt) de matplotlib 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 documentation :

clase matplotlib.ticker.StrMethodFormatter (fmt)

Use una cadena de formato de estilo nuevo (como la utilizada por str.format ()) para formatear la marca.

El campo utilizado para el valor debe etiquetarse con xy el campo utilizado para la posición debe etiquetarse pos.