如何反转 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.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()
【讨论】:
非常感谢特伦顿!此外,放弃 Facetgrid 的进一步提示 :) @Cider 不客气。很高兴这对你有用。以上是关于如何反转 seaborn 图形级别图的轴(FacetGrid)的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib 循环遍历 seaborn 图中的轴以获取多个子图
seaborn可视化散点图并自定义数据轴标签(X轴和Y轴的轴标签,Change X & Y Axis Labels to a Seaborn Plot)