【问题标题】:How to set specific x axis labels in to show non alphabetical order on a pandas boxplot?如何设置特定的 x 轴标签以在熊猫箱线图上显示非字母顺序?
【发布时间】:2021-03-14 08:49:05
【问题描述】:

采用以下 csv 输入(出于显而易见的原因,未包含所有数据点):

"Date","Production"
"1962-01",589
"1962-02",561
...
"1975-11",797
"1975-12",843

我正在尝试使用按月分组来格式化箱线图中的以下数据。但不是显示 01 02 .. 11 12,我希望它在 x 标签上显示一月、二月...。

为此,我将数据放入数据框并将“日期”转换为 pd.to_datetime。然后将其设置为索引。

df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index("Date")

然后,我创建了一个名为“Month”和“Alph_Month”的新列

df["Month"] = df.index.month
df["Alph_Months"] = df.index.strftime('%B')

此时我有一个如下所示的数据集:


      Production    Month   Alph_Months
Date            
1962-01-01  589    1        January
1962-02-01  561    2        February
1962-03-01  640    3        March
1962-04-01  656    4        April

要创建箱线图,我尝试了以下方法:

df[['Production', 'Alph_Months']].boxplot(figsize=(16,6),by='Alph_Months', grid=True);

但是,这似乎按字母顺序(4 月、8 月、12 月...)而不是 1 月、2 月、3 月等的顺序返回标签。

有没有办法让箱线图按月列排序值,但按 Alph_Months 列设置标签值?

【问题讨论】:

    标签: python pandas dataframe boxplot


    【解决方案1】:

    假设你有这条线,你可以尝试使用plt.xticks

    import matplotlib.pyplot as plt 
    

    xticks 函数允许您重命名图表上的 x 刻度,因此如果您想根据月份重命名箱线图刻度,您可以执行以下操作:

    plt.xticks([1, 2, 3, ...], ['Jan', 'Feb', ...])
    

    您在绘制箱线图后放置这条线。我确实注意到您正在为 DataFrame 使用 boxplot 函数。我不确定plt.xticks 是否可以使用,但它肯定可以用于在seabornmatplotlib 中绘制箱线图

    如果您想稍微缩短一点,可以将 [1, 2, 3, ...] 替换为 range(1, 13)

    【讨论】:

    • 这个解决方案似乎不起作用,因为实际值不会在图表上移动,只有标签会改变。现在这是双重错误。
    • 抱歉 - 我误读并认为您只是想更改 x 轴标签。您是否尝试过在matplotlibseaborn 中绘制箱线图?当我在那里做箱线图时,我没有得到在绘图之前按字母顺序排列行的问题。
    猜你喜欢
    • 2019-06-12
    • 2014-11-05
    • 1970-01-01
    • 2017-08-07
    • 2021-10-30
    • 2014-06-23
    • 2021-03-16
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多