python - 如何反转 seaborn 图形级别图的轴(FacetGrid)
问题描述
我想在 Facetgrid 的每个图中反转 y 轴。
您可以在下面找到代码的简化示例:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df_test = pd.DataFrame({'a':['yes', 'no']*5, 'b':np.arange(10), 'c':np.arange(10)*2})
plt.figure()
g = sns.FacetGrid(data=df_test, row='a')
g.map_dataframe(sns.scatterplot, y='c', x='b')
plt.show()
据我所知,这通常是ax.invert_yaxis()
在使用 matplotlib 时完成的,所以我尝试通过它来访问它,g.axes
但没有运气。
我知道我可以手动设置 a ylim=(max_val, min_val)
,但是,这会导致不雅观的刻度间距。
解决方案
- 通过迭代提取和设置每个轴
g.axes
- 在
python 3.8.11
,matplotlib 3.4.3
,中测试seaborn 0.11.2
g = sns.FacetGrid(data=df_test, row='a')
g.map_dataframe(sns.scatterplot, y='c', x='b')
for ax in g.axes[0]:
ax.invert_yaxis()
- 但是,
seaborn.FacetGrid
不建议直接使用。seaborn.relplot
使用图形级别图kind='scatter'
g = sns.relplot(data=df_test, row='a', x='b', y='c', kind='scatter', height=3)
for ax in g.axes[0]:
ax.invert_yaxis()
- 用于
.ravel()
展平n x n
数组或axes
, 其中两者n > 1
df_test = pd.DataFrame({'a':['yes', 'no', 'maybe']*4, 'b':np.arange(12), 'c':np.arange(12)*2, 'd': np.arange(12)*3})
g = sns.relplot(data=df_test, col='a', col_wrap=2, x='b', y='c', kind='scatter', height=3)
for ax in g.axes.ravel():
ax.invert_yaxis()
推荐阅读
- c# - 如何避免从 LINQ to Entities 中的多个线程从 SQL 数据库中读取相同的记录
- database - 用 TCL 合并内存数据库上的几个 SQLite 数据库
- android - 如何在数字上打开输入类型文本
- node.js - 使用 Node 服务器在 React App 中显示来自网络驱动器的动态 PDF
- vue.js - 如何根据此样式绑定中的条件添加一种样式?Vue.js
- python - 在pymongo中的多个字段上分组
- json - 在 Swift / SwiftUI 中捕获 json 错误“错误的纬度和经度”
- sql - 我们可以在 SOAP Web 服务请求中传递动态值吗?
- github - GitHub 团队而不是用户的 GitHub PAT
- javascript - 动画 SVG 圆形边框像进度一样,但一种方式和另一种方式