【问题标题】:How to re-arrange the boxplot text in specific order如何按特定顺序重新排列箱线图文本
【发布时间】:2021-12-12 09:42:48
【问题描述】:

我正在尝试将文本放入我的箱线图中。然而,在我按特定顺序(高级、豪华、家庭)排列我的 x 轴后,数据标签不再遵循该顺序。我应该如何更改我的代码以反映该特定顺序?

数据:

    RoomCategory    ADR
514 Superior    114.75
515 Family  372.88
516 Deluxe  182.5
517 Deluxe  300.0
518 Family  371.45
519 Family  320.0
520 Deluxe  300.0
521 Family  414.0

我的代码:

box_plot = sns.boxplot(data=bgr21, x='RoomCategory',y='ADR',order=['Superior','Deluxe','Family'])

# printing the median value in the boxplot
medians= bgr21.groupby(['RoomCategory'])['ADR'].median()
vertical_offset = bgr21['ADR'].median() * 0.05 # offset from median for display
round_medians = np.round(medians,2)

for xtick in box_plot.get_xticks():
    box_plot.text(xtick,round_medians[xtick] + vertical_offset,round_medians[xtick], 
           horizontalalignment='center', size='large',color='b',weight='semibold')

输出:

【问题讨论】:

  • 请添加 bgr21 的样本以重现此问题。
  • 嗨rosegod,我是新来的,我应该如何添加我的样本df?谢谢
  • 嗨,我刚刚提供了一些数据,使用 to_clipboard() 可以吗?

标签: python matplotlib boxplot


【解决方案1】:

这个顺序是不正确的,它受到我们指定类别顺序的影响。因此,我们需要重新排序要按预期顺序注释的中值数据。我使用类别的顺序对数据进行排序。

import seaborn as sns

sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
box_plot = sns.boxplot(x="day",y="total_bill",data=tips, order=['Sun','Sat','Fri','Thur'])

medians = tips.groupby(['day'])['total_bill'].median()
medians = medians.reindex(index=['Sun','Sat','Fri','Thur'], copy=True)
#print(medians)
vertical_offset = tips['total_bill'].median() * 0.05 # offset from median for display

for i in range(len(box_plot.get_xticklabels())):
    #print(i)
    box_plot.text(i,medians[i] + vertical_offset,medians[i], 
            horizontalalignment='center',size='x-small',color='w',weight='semibold')

【讨论】:

  • 你的数据是未知的,所以我用正式版的数据代替。如果我的回答对您有帮助,请点击答案旁边的复选标记接受我的回答。
  • 嗨,我刚刚尝试在我的问题中添加一些数据。有帮助吗?感谢您的宝贵时间。
  • 不能仅用添加的数据绘制箱线图。在我看来,您的代码基于this answer。我已将类别顺序更改为此答案并对其进行排序。
  • 如果您检查参考答案所做的更改,您将能够看到代码中的修改。
  • 嗨,我知道了。秘密在medians.reindex(index=['Sun','Sat','Fri','Thur'], copy=True) 以确保计算从我想要的序列开始。这是正确的解释吗?
猜你喜欢
  • 2022-09-29
  • 2019-10-10
  • 1970-01-01
  • 2021-12-26
  • 2012-02-01
  • 2016-10-19
  • 2020-01-16
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多