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

如何将Matplotlib/Seaborn图表Y轴刻度数字转换为对应字母

替换Seaborn Countplot Y轴刻度为自定义映射值

问题场景

运行以下代码后,生成的countplot Y轴是字符串类型的1~49整数,需要将指定数字替换为对应字母(如1→AL、2→AK、4→AZ等),此前尝试ax.set_yticks方法未生效。

原代码:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

data = list(map(lambda n:str(n), np.random.choice(np.arange(1,50), 1000)))
fig, ax = plt.subplots(1,1)
sns.countplot(y=data,ax=ax)
ax.set_yticklabels(ax.get_yticklabels(), fontsize=5)
plt.show()

两种可行解决方案

方案1:修改已生成图表的刻度标签

先定义数字到目标字母的映射字典,再替换现有刻度的文本内容:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 定义数字与目标字母的映射关系
num_to_label = {
    "1": "AL",
    "2": "AK",
    "4": "AZ",
    "5": "AR",
    # 按需补充其他数字的映射
}

data = list(map(lambda n:str(n), np.random.choice(np.arange(1,50), 1000)))
fig, ax = plt.subplots(1,1)
sns.countplot(y=data,ax=ax)

# 获取当前Y轴所有刻度的文本
current_tick_text = [tick.get_text() for tick in ax.get_yticklabels()]
# 替换为映射值,无映射的保留原数字
new_tick_text = [num_to_label.get(text, text) for text in current_tick_text]
# 设置新的刻度标签
ax.set_yticklabels(new_tick_text, fontsize=5)

plt.show()

方案2:数据预处理阶段直接替换

在生成数据时完成替换,避免后续修改图表刻度,更高效:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

num_to_label = {
    "1": "AL",
    "2": "AK",
    "4": "AZ",
    "5": "AR",
    # 按需补充其他映射
}

# 生成数据时直接替换为目标标签,无映射的保留原数字字符串
data = [num_to_label.get(str(n), str(n)) for n in np.random.choice(np.arange(1,50), 1000)]
fig, ax = plt.subplots(1,1)
sns.countplot(y=data,ax=ax)
ax.set_yticklabels(ax.get_yticklabels(), fontsize=5)
plt.show()

为什么ax.set_yticks方法未生效?

ax.set_yticks()的作用是设置刻度的位置,而非修改刻度的显示文本。要替换刻度标签内容,必须使用ax.set_yticklabels()传入新文本值,或者在数据源头直接使用目标标签生成图表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:29