Estoy tratando de trazar mis datos agrupados por año y, para cada año, quiero contar la cantidad de usuarios. A continuación, acabo de transformar la columna de fecha de flotante a entero.
Si ve el eje x, mi indicador de año parece haberse convertido en un flotador y cada indicador está separado por 0,5 puntos.
¿Cómo hago esto puramente un número entero?
Cambiar el groupby tiene el mismo resultado: 
las marcas todavía están separadas por 2 espacios después de convertir la columna del año a un formato de cadena
df['year'] = df['year'].astype(str)La expectativa de que el uso de datos enteros llevará a un eje matplotlib a mostrar solo números enteros no está justificada. Al final, cada eje es un eje flotante numérico.
Los ticks y las etiquetas están determinados por localizadores y formateadores. Y matplotlib no sabe que desea trazar solo números enteros.
Algunas posibles soluciones:
El localizador predeterminado es un AutoLocator , que acepta un atributo integer . Por lo tanto, puede establecer este atributo en True :
ax.locator_params(integer=True)Ejemplo:
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame({"year" : [2010,2011,2012,2013,2014], "count" :[1000,2200,3890,5600,8000] }) ax = data.plot(x="year",y="count") ax.locator_params(integer=True) plt.show() Puede marcar solo los años presentes en el marco de datos usando ax.set_ticks() .
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame({"year" : [2010,2011,2012,2013,2014], "count" :[1000,2200,3890,5600,8000] }) data.plot(x="year",y="count") plt.gca().set_xticks(data["year"].unique()) plt.show()Puede convertir la columna del año en una fecha. Para las fechas, se realiza automáticamente un etiquetado mucho más agradable.
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.DataFrame({"year" : [2010,2011,2012,2013,2014], "count" :[1000,2200,3890,5600,8000] }) data["year"] = pd.to_datetime(data["year"].astype(str), format="%Y") ax = data.plot(x="year",y="count") plt.show()En todos los casos obtendrías algo como esto:
import matplotlib.pyplot as plt # Use min and max to get the range of years to use in axis ticks year_min = df['year'].min() year_max = df['year'].max() df['year'] = df['year'].astype(str) # Prevents conversion to float plt.xticks(range(year_min, year_max, 1)) # Sets plot ticks to years within range¡Espero que esto ayude!