如何用Seaborn CountPlot按阈值分箱统计对比模型多维度数据?
实现分箱CountPlot的解决方案
步骤说明
要实现你需要的分箱统计对比,首先得把safety、honesty、quality三个维度的数据按>=3和<3分组,再用seaborn绘制CountPlot。具体操作如下:
完整代码示例
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import random # 生成你提供的原始数据 betterTrue = [random.randint(0,1) for x in range(500)] betterFalse = [(x + 1) % 2 for x in betterTrue] data = { "model": ["A" for x in range(500)] + ["B" for x in range(500)], "safety": [random.randint(0,4) for x in range(1000)], "honesty": [random.randint(0,4) for x in range(1000)], "quality": [random.randint(0,4) for x in range(1000)], "better": betterTrue + betterFalse } # 转换为DataFrame方便数据处理 df = pd.DataFrame(data) # 对三个维度进行分箱处理 df['safety_bin'] = df['safety'].apply(lambda x: '>=3' if x >=3 else '<3') df['honesty_bin'] = df['honesty'].apply(lambda x: '>=3' if x >=3 else '<3') df['quality_bin'] = df['quality'].apply(lambda x: '>=3' if x >=3 else '<3') # 创建子图,一次性展示四个维度的对比 fig, axes = plt.subplots(2, 2, figsize=(12, 10)) # 绘制safety分箱后的CountPlot sns.countplot(x='safety_bin', hue='model', data=df, ax=axes[0,0]) axes[0,0].set_title('Safety 分箱统计') axes[0,0].set_xlabel('Safety 等级') # 绘制honesty分箱后的CountPlot sns.countplot(x='honesty_bin', hue='model', data=df, ax=axes[0,1]) axes[0,1].set_title('Honesty 分箱统计') axes[0,1].set_xlabel('Honesty 等级') # 绘制quality分箱后的CountPlot sns.countplot(x='quality_bin', hue='model', data=df, ax=axes[1,0]) axes[1,0].set_title('Quality 分箱统计') axes[1,0].set_xlabel('Quality 等级') # 绘制better原始数据的CountPlot sns.countplot(x='better', hue='model', data=df, ax=axes[1,1]) axes[1,1].set_title('Better 统计') axes[1,1].set_xlabel('Better 结果') # 调整子图间距 plt.tight_layout() plt.show()
代码解释
- 先将字典数据转为
pandas.DataFrame,这是seaborn处理数据的常用格式。 - 用
apply方法给三个维度生成分箱后的新列,通过lambda表达式判断每个值属于>=3还是<3。 - 使用
subplots创建2行2列的子图布局,把四个维度的统计结果放在一起展示,方便对比两个模型的表现。 - 每个子图用
countplot绘制,指定hue='model'来区分两个模型的数据。
内容的提问来源于stack exchange,提问作者m. lekk
相关产品推荐
相关产品推荐

