首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自定义海运绘图的每个子图的文本滴答标签

如何自定义海运绘图的每个子图的文本滴答标签
EN

Stack Overflow用户
提问于 2021-11-02 11:54:43
回答 1查看 1.1K关注 0票数 3

让我们考虑以下示例(来自海运文档):

代码语言:javascript
复制
titanic = sns.load_dataset("titanic")

fg = sns.catplot(x="age", y="embark_town",
                hue="sex", row="class",
                data=titanic[titanic.embark_town.notnull()],
                orient="h", height=2, aspect=3, palette="Set3",
                kind="violin", dodge=True, cut=0, bw=.2)

输出:

我想改变y轴上的勾号,例如在括号中加上一个数字:(1)南安普顿,(2)瑟堡,(3)皇后镇。我看过这个回答,我试过使用FuncFormatter,但是我得到了一个奇怪的结果。这是我的代码:

代码语言:javascript
复制
titanic = sns.load_dataset("titanic")

fg = sns.catplot(x="age", y="embark_town",
                hue="sex", row="class",
                data=titanic[titanic.embark_town.notnull()],
                orient="h", height=2, aspect=3, palette="Set3",
                kind="violin", dodge=True, cut=0, bw=.2)

from matplotlib.ticker import FuncFormatter
for ax in fg.axes.flat:
    ax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f'({1 + pos}) {x}'))

这是输出:

看起来xlambda中的pos是一样的。我原以为x是滴答标签的价值(即南安普敦、瑟堡、昆斯敦)。我做错了什么?

软件版本:

代码语言:javascript
复制
matplotlib                         3.4.3
seaborn                            0.11.2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 13:53:26

  • 类似于如何在海运挂图中旋转xticklabels的答案,但需要为每个子图的每个滴答定制文本。
  • 文本标签的工作方式与另一个示例中的数字标签不同。数字标签与滴答位置匹配,但对于文本标签则不是这样。
  • .get_yticklabels()为每个子图获取[Text(0, 0, 'Southampton'), Text(0, 1, 'Cherbourg'), Text(0, 2, 'Queenstown')]
  • 如下所示,提取文本和位置,并使用.set_yticklabels设置新的文本标签
  • python 3.8.12**,** matplotlib 3.4.3**,** seaborn 0.11.2中测试的
代码语言:javascript
复制
import seaborn as sns

titanic = sns.load_dataset("titanic")

fg = sns.catplot(x="age", y="embark_town",
                hue="sex", row="class",
                data=titanic[titanic.embark_town.notnull()],
                orient="h", height=2, aspect=3, palette="Set3",
                kind="violin", dodge=True, cut=0, bw=.2)

for ax in fg.axes.flat:  # iterate through each subplot
    labels = ax.get_yticklabels()  # get the position and text for each subplot
    for label in labels:
        _, y = label.get_position()  # extract the y tick position
        txt = label.get_text()  # extract the text
        txt = f'({y + 1}) {txt}'  # update the text string
        label.set_text(txt)  # set the text
    ax.set_yticklabels(labels)  # update the yticklabels

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69810007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档