python - name - ¿Cómo formato el formato de número de eje a miles con una coma en matplotlib?
title in figure python (5)
¿Cómo puedo cambiar el formato de los números en el eje x para que sean como 10,000
lugar de 10000
? Idealmente, me gustaría hacer algo como esto:
x = format((10000.21, 22000.32, 10120.54), "#,###")
Aquí está el código:
import matplotlib.pyplot as plt
# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(15)
fig1.set_figwidth(20)
ax = fig1.add_subplot(2,1,1)
x = 10000.21, 22000.32, 10120.54
y = 1, 4, 15
ax.plot(x, y)
ax2 = fig1.add_subplot(2,1,2)
x2 = 10434, 24444, 31234
y2 = 1, 4, 9
ax2.plot(x2, y2)
fig1.show()
La mejor manera que he encontrado para hacer esto es con StrMethodFormatter
:
import matplotlib as mpl
ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter(''{x:,.0f}''))
Por ejemplo:
import pandas as pd
import requests
import matplotlib.pyplot as plt
import matplotlib as mpl
url = ''https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USDT&aggregate=1''
df = pd.DataFrame({''BTC/USD'': [d[''close''] for d in requests.get(url).json()[''Data'']]})
ax = df.plot()
ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter(''{x:,.0f}''))
plt.show()
Puede usar matplotlib.ticker.funcformatter
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tkr
def func(x, pos): # formatter function takes tick label and tick position
s = ''%d'' % x
groups = []
while s and s[-1].isdigit():
groups.append(s[-3:])
s = s[:-3]
return s + '',''.join(reversed(groups))
y_format = tkr.FuncFormatter(func) # make formatter
x = np.linspace(0,10,501)
y = 1000000*np.sin(x)
ax = plt.subplot(111)
ax.plot(x,y)
ax.yaxis.set_major_formatter(y_format) # set formatter to needed axis
plt.show()
Si te gusta lo cursi y corto también puedes actualizar las etiquetas
def update_xlabels(ax):
xlabels = [format(label, '',.0f'') for label in ax.get_xticks()]
ax.set_xticklabels(xlabels)
update_xlabels(ax)
update_xlabels(ax2)
Siempre me encuentro en esta misma página cada vez que trato de hacer esto. Claro, las otras respuestas hacen el trabajo, ¡pero no son fáciles de recordar para la próxima! ex: import ticker y use lambda, def personalizada, etc.
Aquí hay una solución simple si tienes un hacha llamada ax
:
ax.set_yticklabels([''{:,}''.format(int(x)) for x in ax.get_yticks().tolist()])
Usar ,
como especificador de formato :
>>> format(10000.21, '','')
''10,000.21''
Alternativamente, también puede usar str.format
lugar de format
:
>>> ''{:,}''.format(10000.21)
''10,000.21''
Con matplotlib.ticker.FuncFormatter
:
...
ax.get_xaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), '','')))
ax2.get_xaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), '','')))
fig1.show()