如何绘制x轴为Partner+Dependents、hue为Churn的Seaborn条形图?
解决方法
你的问题出在数据预处理和绘图参数设置上,以下是修正后的步骤和代码:
问题分析
- 你用
pivot_table将Churn转为列,导致无法用hue='Churn'区分不同流失状态的条形 x参数只指定了Dependents,没有包含Partner,无法实现两者组合作为x轴- 对
customerID用sum不合理,因为它是用户唯一标识,应该统计数量(计数)
修正代码
方法1:合并Partner和Dependents为新列
先将两个字段合并成一个代表组合的列,再直接绘图:
import seaborn as sns import matplotlib.pyplot as plt # 合并Partner和Dependents为新列,明确显示组合关系 df['Partner_Dependents'] = df['Partner'] + " - " + df['Dependents'] # 绘制条形图:x为组合列,y为用户数量,hue为Churn sns.barplot( x='Partner_Dependents', y='customerID', hue='Churn', data=df, estimator=len # 统计用户数量,替代sum ) # 美化图表 plt.xlabel('Partner & Dependents') plt.ylabel('Number of Customers') plt.title('Customer Count by Partner-Dependents Combination and Churn') plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.show()
方法2:先分组统计再绘图
先按Partner、Dependents、Churn分组计算用户数,再绘图:
import seaborn as sns import matplotlib.pyplot as plt # 分组统计用户数量,得到清晰的统计结果 df_grouped = df.groupby(['Partner', 'Dependents', 'Churn'])['customerID'].count().reset_index(name='Customer_Count') # 绘制条形图:按Partner分面,x为Dependents,hue为Churn g = sns.catplot( x='Dependents', y='Customer_Count', hue='Churn', col='Partner', data=df_grouped, kind='bar', dodge=True ) g.set_axis_labels('Dependents', 'Number of Customers') g.set_titles('Partner: {col_name}') plt.show()
关键说明
- 用
estimator=len(或直接分组统计count)替代sum,因为customerID是唯一标识,统计数量才是合理需求 - 合并
Partner和Dependents为新列,能让x轴直接显示两者的组合关系 - 避免用
pivot_table转置Churn,保留Churn作为行字段才能用hue参数区分不同流失状态的条形
内容的提问来源于stack exchange,提问作者Raffel Ravionaldo
相关产品推荐
相关产品推荐

