Python如何实现分类特征密度直方图分栏展示及批量绘制
正确实现代码
你需要的分栏密度直方图可通过sns.displot搭配指定参数实现,既支持分栏配置,也可输出密度维度的统计结果,示例代码如下:
sns.displot( data=raw, x="district_code", col="status_group", stat="density", kind="hist", edgecolor="white" )
参数说明:
stat="density":将纵轴统计值从计数转换为密度,符合密度直方图的需求col="status_group":按指定特征的取值拆分多列分栏展示kind="hist":指定输出直方图类型,默认值可省略,如需叠加密度曲线可额外添加kde=True参数
批量绘图函数封装
你可以将绘图逻辑封装为以下函数,传入特征列表即可批量生成图表:
import seaborn as sns import matplotlib.pyplot as plt def batch_plot_density_hist(feature_list, group_col="status_group", data=raw, save_fig=False): for feat in feature_list: # 生成绘图对象 g = sns.displot( data=data, x=feat, col=group_col, stat="density", kind="hist", edgecolor="white", height=4, aspect=0.9 ) # 基础样式优化 g.set_axis_labels(feat, "密度") g.set_titles(col_template="{col_name}") # 旋转分类标签避免重叠 for ax in g.axes.flat: ax.tick_params(axis='x', rotation=45, labelright=False) plt.tight_layout() # 按需保存图片 if save_fig: plt.savefig(f"{feat}_density_by_{group_col}.png", dpi=150, bbox_inches="tight") plt.show()
调用示例:
# 传入待绘制的特征列表即可批量运行 batch_plot_density_hist(feature_list=["district_code", "source_class", "其他待绘制特征"])
展示效果优化方案
针对部分特征展示效果差的问题,可通过以下方式调整:
- 分类标签重叠:调整
height和aspect参数放大图表尺寸,或加大标签旋转角度 - 柱子比例不合理:添加
bins参数手动指定分箱数,分类特征可设置为bins=len(raw[feat].unique())匹配特征取值数量 - 极值干扰展示:提前过滤出现频次低于阈值的异常取值,例如保留出现次数≥10的取值再绘图:
data = data[data[feat].map(data[feat].value_counts()) >= 10] - 样式区分度低:可添加
hue=group_col参数按分组配置不同颜色,或设置multiple="dodge"调整为并列柱状样式提升区分度
内容的提问来源于stack exchange,提问作者brenda89
相关产品推荐
相关产品推荐

