Seaborn中用FacetGrid绘制子类别利润分面图遇异常求助
解决Seaborn FacetGrid绘图异常问题
问题根源
你调用FacetGrid.map()的方式有误:直接给sns.barplot传入全局数据集,导致所有数据都渲染到第一个子图中;同时未配置子图尺寸参数,造成子图过小。
修正代码
import seaborn as sns import matplotlib.pyplot as plt # 初始化FacetGrid,指定分栏字段,设置子图排列和尺寸 g = sns.FacetGrid( data=sub_category_profit, col="sub_category", col_wrap=3, # 每行显示3个子图,避免横向过长 height=4, # 单个子图的高度 aspect=0.8 # 子图宽高比 ) # map方法只需传入绘图函数、x/y列名,无需单独传data g.map(sns.barplot, "region", "profit", order=sub_category_profit["region"].unique()) # 优化图表标签与布局 g.set_axis_labels("Region", "Profit") g.set_titles("Sub Category: {col_name}") plt.tight_layout() plt.show()
核心调整说明
col_wrap:控制每行子图数量,避免因sub_category过多导致子图横向挤压height+aspect:自定义单个子图的尺寸,解决过小问题map的正确用法:FacetGrid会自动拆分数据集并传入子图,无需给sns.barplot重复传data参数,仅需指定x、y对应的列名order(可选):统一各子图中region的显示顺序,提升图表一致性
内容的提问来源于stack exchange,提问作者bharat bisht
相关产品推荐
相关产品推荐

