如何反转 seaborn 图形级别图的轴(FacetGrid)

Posted

技术标签:

【中文标题】如何反转 seaborn 图形级别图的轴(FacetGrid)【英文标题】:How to invert the axis of a seaborn figure-level plot (FacetGrid) 【发布时间】:2021-11-11 17:54:38 【问题描述】:

我想在 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()

据我所知,这通常是在使用 matplotlib 时使用 ax.invert_yaxis() 完成的,所以我尝试通过 g.axes 访问它,但没有运气。

我知道我可以手动设置 ylim=(max_val, min_val),但是,这会导致不美观的刻度间距。

【问题讨论】:

【参考方案1】: 通过迭代g.axes 提取并设置每个轴 python 3.8.11matplotlib 3.4.3seaborn 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.relplotkind='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()

【讨论】:

非常感谢特伦顿!此外,放弃 Facetgrid 的进一步提示 :) @Cider 不客气。很高兴这对你有用。

以上是关于如何反转 seaborn 图形级别图的轴(FacetGrid)的主要内容,如果未能解决你的问题,请参考以下文章

seaborn使用(样式管理)

使用 seaborn 更改直方图上的轴单位

更改seaborn热图的轴标签[重复]

Matplotlib 循环遍历 seaborn 图中的轴以获取多个子图

共享轴并删除 matplotlib 子图中未使用的轴

seaborn可视化散点图并自定义数据轴标签(X轴和Y轴的轴标签,Change X & Y Axis Labels to a Seaborn Plot)