Seaborn中row_order参数与plt.figure(figsize)设置不生效问题求助
Seaborn中row_order参数与plt.figure(figsize)设置不生效问题求助
嘿,我来帮你排查这两个不生效的问题,都是Seaborn高阶函数里很常见的新手坑哦!
问题1:plt.figure(figsize) 设置不生效的原因及解决
你用 plt.figure(figsize=(12,7)) 定义图形尺寸,但 sns.relplot() 是Seaborn基于FacetGrid实现的高阶函数,它会自动创建专属的图形对象,完全不会理会你提前用 plt.figure() 定义的尺寸。
要调整 relplot 的图形大小,得直接在 relplot 函数里用 height 和 aspect 参数组合控制:
height:单个子图面板的高度(单位为英寸)aspect:面板的宽高比(整体宽度 = height × aspect),这样就能精准匹配你想要的尺寸比例
问题2:row_order 参数不生效的原因及解决
你的代码里根本没用到 row 参数来做行分面,row_order 是专门用来控制行分面子图的顺序的,自然不会起作用!你实际需求是控制x轴上月份的显示顺序,这时候应该用 x_order 参数,把你定义的月份列表传进去就对了。
修正后的完整代码
# 直接在relplot内配置尺寸,替换row_order为x_order g = sns.relplot( kind='line', data=merge_wrp, x='month_name', y='Amount_tran', hue='Product', errorbar=None, x_order=['April','May','June','July', 'August','September', 'October','November','December','January', 'February','March'], height=7, # 单个面板高度,对应原figsize的高度 aspect=12/7 # 宽高比,计算后整体宽度为7*(12/7)=12,和原figsize一致 ) g.set_xticklabels(rotation=50) # 用FacetGrid的内置方法设置x轴旋转更稳妥 plt.show()
补充小提示
如果之后你需要按某个变量拆分成多行子图(用到row参数),那时候row_order才会派上用场,举个例子:
g = sns.relplot( kind='line', data=merge_wrp, x='month_name', y='Amount_tran', hue='Product', row='你的分面变量', row_order=['分组A','分组B','分组C'], # 此时row_order生效,控制行面板顺序 height=5, aspect=1.5 )
备注:内容来源于stack exchange,提问作者rereer
相关产品推荐
相关产品推荐

