计算的Numpy中值未显示在BarPlot上,如何根据

时间:2020-10-22 19:29:38

标签: python-3.x seaborn

您好,感谢您访问我的帖子。

这是产生中值的工作代码

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)

输出enter image description here

条形值不代表打印的中位数。我该怎么做才能解决此问题?

2 个答案:

答案 0 :(得分:1)

似乎您实际上是在用CI波段而不是您打算的中位数绘制平均值。那是因为您的代码中有一个小的矛盾之处:

ax = sns.barplot(x= cleaned_pokedex["Wall"],y= cleaned_pokedex["Primary Type"],data= Final_Wall_Median,palette = pkmn_type_colors)
  1. 您正在告诉seabornx数据帧中获取ycleaned_pokedex的值,
  2. 但是,然后您告诉它使用data数据框中的Final_Wall_Median

因此,看来seaborn是在随意选择使用y~x提供的数据,而不是传递给Final_Wall_Median的预先汇总的data。通常,如果您只想传递任何两个数组(它们不必来自同一数据帧),则只使用xy属性,或者可以分析data作为您无法使用的数据框,xy作为字符串列名称(例如(x="Wall", y="Primary Type", data=cleaned_pokedex)

但是,正如所指出的,如果您只是将“ Wall”,“ Primary Type”尺寸传递到xy的{​​{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)