修改seaborn柱状图xtick标签后出现条形缺失该如何解决?
问题根源
你出现该问题的核心原因是代码执行顺序错误:你在调用set_xticks(range(len(Months)))和set_xticklabels(Months)时,Months变量还没有被定义,此时实际调用的是之前运行残留的旧Months变量,大概率旧变量的长度只有11,导致你只设置了11个x轴刻度,第12个对应12月的条形就被挤出了显示区域。
其次还有两个隐藏风险:
- 直接从
saledate字段提取的月份字符串没有去重,长度和groupby聚合后的12个x轴类别不匹配 - 没有按数字月份排序,可能出现标签和实际月份数值不对应的问题
解决方法
调整代码顺序,先提取排序去重后的月份标签,再设置刻度,保证标签数量和x轴类别数量完全匹配,示例代码如下:
# 第一步:先按数字月份排序,保证后续标签顺序和x轴顺序一致 df_pr_2020 = df_pr_2020.sort_values('Month').reset_index(drop=True) # 第二步:提取去重后的月份字符串标签,长度和x轴类别数(12个)完全对应 Months = df_pr_2020['saledate'].dt.strftime('%b').unique() # 第三步:绘图 pr_sales = sns.barplot(x='Month', y='dollartotal', color='lightblue', data=df_pr_2020) pr_sales.set(xlabel='2020 by Month', ylabel='Dollars', title='2020 Pre-Roll Sales ') # 第四步:设置刻度和标签,两者长度完全匹配 pr_sales.set_xticks(range(len(Months))) pr_sales.set_xticklabels(Months)
如果你的数据中存在某个月无销售记录的情况,也可以手动生成12个月份的标签保证完整性:
# 手动生成1-12月对应的英文月份缩写,顺序完全匹配数字月份 Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
内容的提问来源于stack exchange,提问作者Dookie9636
相关产品推荐
相关产品推荐

