Seaborn Objects API绘制水平条形图的正确方法是什么?
在Seaborn Objects API中绘制水平条形图的正确方法
旧版Seaborn的barplot会自动处理宽格式数据并通过orient切换方向,但Objects API的设计更强调显式变量映射,直接加orient="h"报错是因为没有明确指定分组和坐标轴变量。下面是两种惯用的解决方法:
方法1:转成长格式数据后绘制(推荐)
Objects API更适配长格式数据,先把宽格式DataFrame转成包含分类和数值的长格式,再通过交换x/y变量的位置实现水平条形图(无需额外orient参数):
import pandas as pd, numpy as np import seaborn.objects as so # 生成测试数据 df = pd.DataFrame(data=np.random.randint(10, size=(3, 5)), columns=[*"abcde"]) # 转长格式:新增分类列和数值列 df_melted = df.melt(var_name="category", value_name="value") # 水平条形图:数值放x轴,分类放y轴 so.Plot(df_melted, x="value", y="category").add(so.Bar(), so.Agg())
方法2:直接处理宽格式数据(显式指定变量)
如果不想转换数据格式,可以通过显式声明变量类型并配合orient参数实现:
import pandas as pd, numpy as np import seaborn.objects as so df = pd.DataFrame(data=np.random.randint(10, size=(3, 5)), columns=[*"abcde"]) so.Plot(df).add(so.Bar(), so.Agg(), x=so.Number(), y=so.Category(), orient="h")
报错原因说明
旧版barplot在处理宽格式数据时,会自动将列名作为分组变量;但Objects API要求必须明确指定分组或坐标轴变量,否则无法识别数据的分组逻辑,因此抛出ValueError: No grouping variables are present in dataframe。
内容的提问来源于stack exchange,提问作者tdy
相关产品推荐
相关产品推荐

