使用Seaborn绘制boxplot箱线图出现显示异常,如何修复?
箱线图异常修复方案
问题原因
你代码里存在两个核心错误,导致绘图异常:
- 变量名不匹配:你定义的字段列表变量名为
m_cols,但循环遍历的是未声明的num_cols,如果num_cols实际包含非数值类型字段,会直接导致X轴数据不满足箱线图的绘制要求。 - 绘图参数冲突:
sns.boxplot中同时直接传入y对应的Series对象、又指定data=df会导致seaborn参数匹配逻辑混乱,出现坐标轴渲染错误。
修复后的代码
基础修复版
import seaborn as sns import matplotlib.pyplot as plt # 提前把是否取消字段转成分类类型,避免循环中重复转换 df['is_canceled'] = df['is_canceled'].astype('category') # 明确指定要遍历的数值列 num_cols = ['lead_time', 'arrival_date_year','arrival_date_week_number','arrival_date_day_of_month','stays_in_weekend_nights','adults','children','babies','is_repeated_guest','previous_cancellations','previous_bookings_not_canceled','booking_changes','agent','total_of_special_requests'] for col in num_cols: # 统一用data参数传入df,字段名直接传字符串即可 sns.boxplot(y='is_canceled', x=col, data=df) # 可选:添加坐标轴标签提升可读性 plt.xlabel(col) plt.ylabel('是否取消订单') plt.show()
极端值优化版
如果部分字段存在极端异常值导致箱线图被压缩看不清,可以开启X轴对数刻度:
for col in num_cols: sns.boxplot(y='is_canceled', x=col, data=df) # 开启对数刻度缓解极端值对展示效果的影响 plt.xscale('log') plt.xlabel(col) plt.ylabel('是否取消订单') plt.show()
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

