python - 基于 facet 在 Seaborn FacetGrid 中自定义标题
问题描述
想做一个分面网格,变量名作为列,部门作为行,每个小图都是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 轴标签的设置,它告诉我映射到某个行的特定变量。我一直在四处挖掘,虽然我确定它存在但我找不到它。
解决方案
您可以使用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])
推荐阅读
- python - 想在 Python 中使用类似 SQL 的 where 子句
- git - 使用 git 更新子模块
- javascript - 未能在“节点”上执行“replaceChild”,但没有失败?
- javascript - 从地图外的链接打开传单标记弹出窗口?
- java - 限制在 java 中创建 Runnable
- c - 在 Linux 内核代码中使用 goto 没有意义
- loops - Flutter contacts_service 包使用
- intellij-idea - intellij idea 对正则表达式的错误处理:“正则表达式匹配空字符串”
- android - 错误:无法访问 javax.annotation.Nullable 的 Nullable 类文件未找到
- javascript - 如何使用列名搜索数据表?