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

如何在热力图右侧添加自定义Y轴刻度?

问题

现有基于Seaborn和Pandas的热力图代码,生成的图表仅左侧显示Y轴刻度,需要在右侧添加自定义Y轴刻度,尝试tick_params方法只能复用左侧刻度,求可行实现方案。

原代码如下:

data = {
    'q1': [6, 4, 4, 4, 6, 6, 6, 4, 6, 6, 6, 6],
    'q2': [3, 3, 3, 4, 3, 3, 4, 3, 4, 3, 4, 1],
    'q3': [6, 3, 4, 4, 4, 4, 6, 6, 6, 6, 4, 1],
    'q4': [3, 6, 6, 6, 6, 6, 4, 4, 6, 4, 6, 4],
    'q5': [4, 3, 3, 3, 3, 6, 6, 4, 4, 6, 3, 4],
    'q6': [3, 3, 4, 4, 6, 3, 3, 1, 6, 4, 4, 4],
    'q7': [4, 3, 3, 3, 3, 6, 4, 1, 4, 1, 4, 1],
    'q8': [4, 4, 1, 6, 4, 6, 4, 1, 6, 1, 4, 1],
    'q9': [4, 6, 4, 3, 4, 3, 4, 6, 6, 4, 3, 4],
    'q10': [3, 4, 1, 3, 4, 3, 3, 6, 6, 3, 4, 4]
}
import seaborn as sns
import pandas as pd

df = pd.DataFrame(data)

cm = sns.heatmap(df.T, annot=False, cbar=True)

cm.get_figure().savefig('heatmap.pdf')
解决方案

通过创建共享X轴的副轴(twinx())实现右侧自定义Y轴刻度,步骤如下:

  1. 生成热力图后,用twinx()创建副轴,共享原轴的X轴
  2. 对齐副轴与原轴的Y轴范围,保证刻度位置匹配
  3. 设置副轴的Y轴刻度位置和自定义标签

修改后的完整代码:

data = {
    'q1': [6, 4, 4, 4, 6, 6, 6, 4, 6, 6, 6, 6],
    'q2': [3, 3, 3, 4, 3, 3, 4, 3, 4, 3, 4, 1],
    'q3': [6, 3, 4, 4, 4, 4, 6, 6, 6, 6, 4, 1],
    'q4': [3, 6, 6, 6, 6, 6, 4, 4, 6, 4, 6, 4],
    'q5': [4, 3, 3, 3, 3, 6, 6, 4, 4, 6, 3, 4],
    'q6': [3, 3, 4, 4, 6, 3, 3, 1, 6, 4, 4, 4],
    'q7': [4, 3, 3, 3, 3, 6, 4, 1, 4, 1, 4, 1],
    'q8': [4, 4, 1, 6, 4, 6, 4, 1, 6, 1, 4, 1],
    'q9': [4, 6, 4, 3, 4, 3, 4, 6, 6, 4, 3, 4],
    'q10': [3, 4, 1, 3, 4, 3, 3, 6, 6, 3, 4, 4]
}
import seaborn as sns
import pandas as pd

df = pd.DataFrame(data)

# 生成热力图
cm = sns.heatmap(df.T, annot=False, cbar=True)

# 创建共享X轴的副轴
ax2 = cm.twinx()

# 自定义右侧Y轴标签,可替换为任意需要的内容
custom_labels = ['问题1', '问题2', '问题3', '问题4', '问题5', 
                 '问题6', '问题7', '问题8', '问题9', '问题10']

# 设置副轴Y轴刻度位置与原轴一致
ax2.set_yticks(range(len(df.columns)))
# 设置自定义刻度标签
ax2.set_yticklabels(custom_labels)

# 对齐副轴与原轴的Y轴范围,避免刻度位置偏移
ax2.set_ylim(cm.get_ylim())

# 可选:隐藏副轴右侧边框,优化视觉效果
ax2.spines['right'].set_visible(False)

# 保存图表
cm.get_figure().savefig('heatmap_with_right_ticks.pdf')

关键说明

  • twinx()创建的副轴与原热力图轴共享X轴,Y轴独立,支持完全自定义刻度
  • 必须通过set_ylim()对齐两个轴的Y范围,否则自定义刻度会出现位置偏移
  • 可根据需求调整自定义标签的内容、字体大小、颜色等样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:15:36