为了账号安全,请及时绑定邮箱和手机立即绑定

如何更正python matplotlib图中x标签的顺序

如何更正python matplotlib图中x标签的顺序

千万里不及你 2022-11-29 15:33:32
我有以下要绘制的数据。month      year       total_salesMay         2020        7June        2020        2  July        2020        1August      2020        2September   2020        22 October     2020       11November    2020        6December    2020        3January     2019        3feburary    2019        11March       2019        65 April       2019        22May         2019        33June        2019        88July        2019        44August      2019        12September   2019        32October     2019        54November    2019        76December    2019        23January     2018        12feburary    2018        32March       2018        234April       2018        2432May         2018        432这是我用来执行此操作的代码: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()我希望 x 标签的顺序从 1 月到 12 月开始,但我的图表从 5 月到 12 月开始,然后从 1 月到 4 月恢复,如图所示(图表的确切值因我更改值而不同)。我怎样才能把它按正确的顺序排列?
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您可以使用以下方法。这个想法是按照这个这篇文章中所示对月份列进行排序

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


查看完整回答
反对 回复 2022-11-29
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

Dataframe.plot让你的工作更容易一些 - 它将每个系列绘制为不同的线,并保持你指定的顺序:


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)


查看完整回答
反对 回复 2022-11-29
  • 2 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信