J'ai les données suivantes que j'essaye de tracer.
def plot_timeline_data(df):
fig, ax = plt.subplots()
ax.set_xticklabels(df['month'].unique(), rotation=90)
for name, group in df.groupby('year'):
ax.plot(group['month'], group['total_sales'], label=name,linestyle='--', marker='o')
ax.legend()
plt.tight_layout()
plt.show()
Voici le code que j'utilise pour le faire:
month year total_sales May 2020 7 June 2020 2 July 2020 1 August 2020 2 September 2020 22 October 2020 11 November 2020 6 December 2020 3 January 2019 3 feburary 2019 11 March 2019 65 April 2019 22 May 2019 33 June 2019 88 July 2019 44 August 2019 12 September 2019 32 October 2019 54 November 2019 76 December 2019 23 January 2018 12 feburary 2018 32 March 2018 234 April 2018 2432 May 2018 432
Je veux que l'ordre des x étiquettes commence de janvier à décembre mais mon graphique commence de mai à décembre, puis reprend de janvier à avril comme indiqué sur la figure (les valeurs exactes du graphique sont différentes car j'ai changé les valeurs) . Comment puis-je mettre cela dans le bon ordre?
3 Réponses :
Je pense que vous devez changer l'ordre de votre index 'month' dans le dataframe pandas.
essayez d'ajouter:
group['month'] = group['month'][8:] + group['month'][:8]
avant de désactiver la boucle for pour tracer les années
Dataframe.plot vous facilite un peu la tâche - il trace chaque série sur une ligne différente et conserve l'ordre dans lequel vous vous inscrivez:
import matplotlib.pyplot as plt
# Convert the dataframe to series of years
df = df.set_index(["month","year"])["total_sales"].unstack()
# Sort the index (which is month)
df = df.loc[[
"January","feburary","March","April","May","June",
"July", "August", "September","October", "November", "December"
]]
# Plot!
df.plot(marker="o", linestyle="--", rot=90)
# Show all ticks
plt.xticks(range(12), df.index)
Vous pouvez utiliser la méthode suivante. L'idée est de trier la colonne du mois comme indiqué dans ceci et ce message
# Capitalize the month names
df["month"] = df["month"].str.capitalize()
# Correct the spelling of February
df['month'] = df['month'].str.replace('Feburary','February')
# Convert to datetime object for sorting
df['month_in'] = pd.DatetimeIndex(pd.to_datetime(df['month'], format='%B')).month
# Sort using the index
df = df.set_index('month_in').sort_index()
plot_timeline_data(df)