You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Joyplot(山脊图)的y轴上添加各分类对应的计数数值?

解决joypy山脊图添加分类计数次y轴的方法
  • 首先提前统计每个分组对应的样本计数值,保证顺序和山脊图的分组顺序一致
  • 遍历joypy返回的每个分组子图,为每个子图添加右侧次Y轴,仅在对应分类的对齐位置显示计数值
  • 调整整体布局避免标签遮挡

完整实现代码如下:

import joypy
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
from sklearn.datasets import load_iris

# 加载示例数据集
iris = load_iris()
iris_df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
                     columns= iris['feature_names'] + ['species'])
# 转换为分类名称方便显示
iris_df['species'] = iris_df['species'].map({0:'setosa', 1:'versicolor', 2:'virginica'})

# 统计每个分类的计数值,顺序和山脊图分组顺序保持一致
group_col = 'species'
counts = iris_df[group_col].value_counts().sort_index()

# 生成山脊图,可根据需求修改展示的数值列、图表尺寸等参数
fig, axes = joypy.joyplot(iris_df, by=group_col, column=iris['feature_names'][0], figsize=(10,6))

# 为每个分图添加右侧计数轴
for idx, ax in enumerate(axes[:-1]): # axes最后一个为共享x轴,无需处理
    ax2 = ax.twinx()
    # 次Y轴范围和原Y轴保持一致
    ax2.set_ylim(ax.get_ylim())
    # 仅在中间位置显示对应分组的计数值,和左侧分类标签对齐
    ax2.set_yticks([0.5])
    ax2.set_yticklabels([counts.iloc[idx]])
    # 隐藏次Y轴的刻度线避免干扰
    ax2.tick_params(axis='y', length=0)

# 给右侧计数轴添加统一标签
fig.text(0.92, 0.5, '分类样本计数', va='center', rotation='vertical', fontsize=12)

# 调整布局避免标签被截断
plt.subplots_adjust(right=0.88)
plt.show()

如果你的数据分组逻辑不同,只需修改group_col为实际的分组列名即可,计数值的统计逻辑也可根据需求调整,只要保证counts的顺序和山脊图的分组顺序完全匹配就能正常显示。

内容的提问来源于stack exchange,提问作者Hoppity81

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:45:05