name python matplotlib

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