【问题标题】:Customizing titles in Seaborn FacetGrid based on facet基于 facet 在 Seaborn FacetGrid 中自定义标题
【发布时间】:2020-05-01 11:25:07
【问题描述】:

想做一个分面网格,以变量名为列,部门为行,每个小图都是y=value和x=date的散点图

我的数据是这样的:

import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from datetime import datetime import matplotlib.dates as mdates import random

datelist = pd.date_range(start="march 1 2020", end="may 20 2020", freq="w").tolist()
varlist = ["x", "y", "z", "x", "y", "z", "x", "y", "z", "x", "y", "z"]
deptlist = ["a", "a", "b", "a", "a", "b", "a", "a", "b", "a", "a", "b"]
vallist =  random.sample(range(10, 30), 12)
df = pd.DataFrame({'date': datelist, 'value': vallist, 'variable': varlist, 'department': deptlist})

我想像这样创建一个 Seaborn Facetgrid:

g = sns.FacetGrid(df, row="department", col="variable", sharey='row')

我想更改 Y 轴标签以包含部门名称,例如“部门 A”等。但根据我使用的数据,特定部门可能会有所不同。所以我想用我从 g 中提取的东西来参数化 Y 轴标签的设置,它告诉我映射到某个行的特定变量。我一直在四处挖掘,虽然我确定它存在但我找不到它。

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    您可以使用set_ylabel()set_xlabel 更改特定方面的标签。因此,在您提供的示例中,department = a | variable = x 构面将为 [0,0],下一个标签位于 [1,0]。

    所以我们可以试试这个,使用 row_order 输入来确保我们有相同的顺序:

    rowOrder = ['a','b']
    g = sns.FacetGrid(df, row="department", col="variable", sharey='row',row_order=rowOrder)
    g = g.map(plt.scatter, "value", "value")
    for i in range(len(rowOrder)):
        g.axes[i,0].set_ylabel(rowOrder[i])
    

    【讨论】:

    • 谢谢!你知道我想要什么,有一个文档解释了对象结构...... g 包含什么,那里有什么方法,哪些在 g.axes 下等等。这总是一场疯狂的追逐。你如何保持直截了当?
    • 不客气!是的,其中一些不是很一致,但正在变得更好。我必须经常查资料。 seaborn 实际上在 matplotlib 上运行,是的,有时您可以随时检查 matplotlib.org/3.2.1/tutorials/introductory/…
    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 2020-12-30
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多