如何反转seaborn Figure-level绘图(FacetGrid)子图的Y轴
你之前调用g.axes未成功,是因为g.axes是和FacetGrid行列布局对应的二维NumPy数组,存储了所有子图的Axes对象,无法直接调用单Axes实例的invert_yaxis()方法。
解决方案
将axes数组展平后遍历每个子图,分别调用Y轴反转方法即可,该方案会保留matplotlib自动计算的刻度范围和间距,不会出现显示异常。
修改后的完整代码如下:
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') # 遍历所有子图反转Y轴 for ax in g.axes.flat: ax.invert_yaxis() plt.show()
补充说明
如果你的FacetGrid布局固定,也可以直接通过索引指定子图操作,比如示例中2行1列的布局可以直接写g.axes[0,0].invert_yaxis()、g.axes[1,0].invert_yaxis(),但用g.axes.flat遍历的写法兼容性更强,任意行列数的布局都可以直接复用。
内容的提问来源于stack exchange,提问作者Cider
相关产品推荐
相关产品推荐

