You need to enable JavaScript to run this app. Python如何实现分类特征密度直方图分栏展示及批量绘制
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 12:15:04