Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

470
Views
Cómo ordenar las etiquetas de ticks en un eje discreto (0 indexado como un gráfico de barras)

Tengo un marco de datos con estos datos y quiero trazarlos con un gráfico de barras con las etiquetas del eje x siendo meses

 import pandas as pd data = {'Birthday': ['1900-01-31', '1900-02-28', '1900-03-31', '1900-04-30', '1900-05-31', '1900-06-30', '1900-07-31', '1900-08-31', '1900-09-30', '1900-10-31', '1900-11-30', '1900-12-31'], 'Players': [32, 25, 27, 19, 27, 18, 18, 21, 23, 21, 26, 23]} df = pd.DataFrame(data) Birthday Players 1900-01-31 32 1900-02-28 25 1900-03-31 27 1900-04-30 19 1900-05-31 27 1900-06-30 18 1900-07-31 18 1900-08-31 21 1900-09-30 23 1900-10-31 21 1900-11-30 26 1900-12-31 23

Esto es lo que tengo

 import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates fig = plt.figure(figsize=(12, 7)) locator = mdates.MonthLocator() fmt = mdates.DateFormatter('%b') X = plt.gca().xaxis X.set_major_locator(locator) X.set_major_formatter(fmt) plt.bar(month_df.index, month_df.Players, color = 'maroon', width=10)

pero el resultado es este con la etiqueta a partir de febrero en lugar de enero

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Por lo general, matplotlib.bar no hace un buen trabajo con las fechas y horas por varias razones. Es fácil configurar manualmente las ubicaciones y etiquetas de sus marcas x como se muestra a continuación. Esta es una función de contenedor de conveniencia del formateador fijo , pero le permite tomar el control con bastante facilidad.

 #generate data data = pd.Series({ '1900-01-31' : 32, '1900-02-28' : 25, '1900-03-31' : 27, '1900-04-30' : 19, '1900-05-31' : 27, '1900-06-30' : 18, '1900-07-31' : 18, '1900-08-31' : 21, '1900-09-30' : 23, '1900-10-31' : 21, '1900-11-30' : 26, '1900-12-31' : 23, }) #make plot fig, ax = plt.subplots(figsize=(12, 7)) ax.bar(range(len(data)), data, color = 'maroon', width=0.5, zorder=3) #ax.set_xticks uses a fixed locator ax.set_xticks(range(len(data))) #ax.set_xticklables uses a fixed formatter ax.set_xticklabels(pd.to_datetime(data.index).strftime('%b')) #format plot a little bit ax.spines[['top','right']].set_visible(False) ax.tick_params(axis='both', left=False, bottom=False, labelsize=13) ax.grid(axis='y', color='gray', dashes=(8,3), alpha=0.5)

Se corrigieron las etiquetas de marca de fecha y hora x en el gráfico de barras de matplotlib.

over 4 years ago · Santiago Trujillo Report

0

  • Las ubicaciones de marcas en el eje x del gráfico de barras están indexadas en 0, no en fechas y horas
  • Esta solución se aplica a cualquier gráfico con un eje discreto (por ejemplo, barra, hist, calor, etc.) .
  • Similar a esta respuesta , la solución más fácil sigue:
    • Vaya al paso 3 si la columna str ya existe
    1. Convierta la columna 'Birthday' en un tipo de fecha y pd.to_datetime con datetime dtype
    2. Extraiga el nombre del mes abreviado en una columna separada
    3. Ordene la columna con pd.Categorical . El módulo de calendar incorporado se usa para proporcionar una lista ordenada de nombres de meses abreviados, o la lista se puede escribir manualmente
    4. Trace el marco de datos con pandas.DataFrame.plot , que usa matplotlib como backend predeterminado
  • Probado en python 3.8.12 , pandas 1.3.4 , matplotlib 3.4.3
 import pandas as pd import matplotlib.pyplot as plt from calendar import month_abbr as ma # ordered abbreviated month names # convert the Birthday column to a datetime and extract only the date component df.Birthday = pd.to_datetime(df.Birthday) # create a month column df['month'] = df.Birthday.dt.strftime('%b') # convert the column to categorical and ordered df.month = pd.Categorical(df.month, categories=ma[1:], ordered=True) # plot the dataframe ax = df.plot(kind='bar', x='month', y='Players', figsize=(12, 7), rot=0, legend=False)

ingrese la descripción de la imagen aquí

  • Si hay muchos meses repetidos, donde los datos deben agregarse, combine los datos usando pandas.DataFrame.groupby y agregue alguna función como .mean() o .sum()
 dfg = df.groupby('month').Players.sum() ax = dfg.plot(kind='bar', figsize=(12, 7), rot=0, legend=False)
over 4 years ago · Santiago Trujillo Report

0

No estoy familiarizado con matplotlib.dates pero debido a que está usando pandas, hay formas simples de hacer lo que necesita usando pandas.

Aquí está mi código:

 import pandas as pd import calendar from matplotlib import pyplot as plt # data data = {'Birthday': ['1900-01-31', '1900-02-28', '1900-03-31', '1900-04-30', '1900-05-31', '1900-06-30', '1900-07-31', '1900-08-31', '1900-09-30', '1900-10-31', '1900-11-30', '1900-12-31'], 'Players': [32, 25, 27, 19, 27, 18, 18, 21, 23, 21, 26, 23]} df = pd.DataFrame(data) # convert column to datetime df["Birthday"] = pd.to_datetime(df["Birthday"], format="%Y-%m-%d") # groupby month and plot bar plot df.groupby(df["Birthday"].dt.month).sum().plot(kind="bar", color = "maroon") # set plot properties plt.xlabel("Birthday Month") plt.ylabel("Count") plt.xticks(ticks = range(0,12) ,labels = calendar.month_name[1:]) # show plot plt.show()

Producción:

imagen de salida

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!