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.