您好,感谢您访问我的帖子。
这是产生中值的工作代码
Wall_Median = pd.pivot_table(cleaned_pokedex, values="Wall", index ='Primary Type',aggfunc={"Wall": np.median})
Final_Wall_Median = Wall_Median.nlargest(18,'Wall')
print(Final_Wall_Median)
例如毒物为193,条形图显示超过200
1. Wall Primary Type Steel 259.0 Fairy 244.0 Dragon 237.0 Rock 235.5 Ground 235.0 Ice 230.0 Flying 220.0 Fighting 216.0 Ghost 215.0 Psychic 215.0 Grass 209.5 Water 208.0 Fire 204.0 Electric 201.0 Dark 200.0 Normal 194.0 Poison 193.0 Bug 180.0
使用海洋条形图绘制值不会产生我从代码中收到的数值
fig = plt.gcf()
fig.set_size_inches(20,18)
ax = sns.barplot(x= cleaned_pokedex["Wall"],y= cleaned_pokedex["Primary Type"],data= Final_Wall_Median,palette = pkmn_type_colors)
条形值不代表打印的中位数。我该怎么做才能解决此问题?
答案 0 :(得分:1)
似乎您实际上是在用CI波段而不是您打算的中位数绘制平均值。那是因为您的代码中有一个小的矛盾之处:
ax = sns.barplot(x= cleaned_pokedex["Wall"],y= cleaned_pokedex["Primary Type"],data= Final_Wall_Median,palette = pkmn_type_colors)
seaborn
从x
数据帧中获取y
和cleaned_pokedex
的值,data
数据框中的Final_Wall_Median
。因此,看来seaborn
是在随意选择使用y~x
提供的数据,而不是传递给Final_Wall_Median
的预先汇总的data
。通常,如果您只想传递任何两个数组(它们不必来自同一数据帧),则只使用x
和y
属性,或者可以分析data
作为您无法使用的数据框,x
和y
作为字符串列名称(例如(x="Wall", y="Primary Type", data=cleaned_pokedex)
)
但是,正如所指出的,如果您只是将“ Wall”,“ Primary Type”尺寸传递到x
,y
的{{1}}和barplot
值中默认情况下将使用“均值”作为估算器。
您有两个选择:
seaborn
由于您已经预先汇总了中位数,因此可以直接使用
sns.barplot(x=cleaned_pokedex["Wall"], y=cleaned_pokedex["Primary Type"], estimator=np.median)
# or
sns.barplot(x=Final_Wall_Median.Wall, y=Final_Wall_Median.index)
。唯一的区别是,如果不提供原始数据(如第一个选项中的整个Final_Wall_Median
数据帧),则无法获得CI波段。
答案 1 :(得分:0)
barplot()
采用参数estimator=
,该参数定义了钢筋高度的计算方式。默认情况下,这是使用mean()
完成的,但是如果您想要的话,可以通过median
:
ax = sns.barplot(..., estimator=np.median)