Seaborn调用histplot后get_xticklabels返回空文本如何解决?
问题原因
你获取x轴刻度标签为空的核心原因是:Matplotlib 底层默认会延迟渲染刻度标签文本,在你调用histplot之后立刻执行get_xticklabels()时,画布还没有完成完整的渲染流程,此时所有刻度标签的文本属性还未被赋值,因此只会拿到空字符串。
解决方法
方法1:先触发画布渲染再提取标签
先调用plt.draw()手动触发画布重绘,再读取刻度标签文本:
import seaborn as sns import matplotlib.pyplot as plt penguins = sns.load_dataset("penguins") g = sns.histplot(data=penguins, x="flipper_length_mm", kde=True) # 手动触发画布渲染 plt.draw() ticks = [i.get_text() for i in g.get_xticklabels()] # 此时ticks就是预期的 ['170', '180', '190', '200', '210', '220', '230']
方法2:直接读取刻度数值(更推荐)
如果你需要的是刻度本身的数值而非格式化后的字符串,可以直接调用get_xticks()方法,不需要提前触发渲染,返回结果直接是数值类型,省去后续类型转换的步骤:
ticks = g.get_xticks() # 返回结果为 array([170, 180, 190, 200, 210, 220, 230]) # 如果需要转成列表可以加tolist():ticks = g.get_xticks().tolist()
内容的提问来源于stack exchange,提问作者rpb
相关产品推荐
相关产品推荐

