微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取堆叠条形图的总高度以便注释上面的值

如何解决如何获取堆叠条形图的总高度以便注释上面的值

所以我试图在整个堆积条形图上方注释总和。

我设法得到堆积条形图的总和但没有得到总高度,因此它看起来像这样:

enter image description here

我知道有一些相关/类似的帖子,但我不知道如何获得总高度。

这是我的代码

athletes = pd.read_csv('athlete_events.csv')

#get just Romania as a country 
df=athletes.loc[athletes["Team"]=="Romania",:] 
df=df[df['Medal'].notna()]

#count medals for teams sports just once 
df=df.drop_duplicates(subset=['Team','NOC','Games','Year','Season','City','Sport','Event','Medal'],keep='first')

# groupby Team and Medal and get the counts
dfg = df.groupby(['Sport','Medal']).Medal.count().reset_index(name='counts')

# pivot the dfg,which will enable to plot the bar
dfp = dfg.pivot(index='Sport',columns='Medal',values='counts')

# add a total column,which will allow dfp to be sorted
dfp['total'] = dfp.sum(axis=1)
dfp=dfp[['bronze','Silver','Gold','total']]

# sort dfp
dfp = dfp.sort_values('total',ascending=False)
dfp.head()

# plot the rows without the total column
ax = dfp.iloc[:,:3].plot.bar(stacked=True,figsize=(20,6))



#customizing the bar plot

#rotate the labels by 45 degrees
plt.xticks(rotation=45,fontsize='11.5')

# Remove axes splines
for s in ['top','bottom','left','right']:
    ax.spines[s].set_visible(False)

# Remove x,y Ticks
ax.xaxis.set_ticks_position('none')
ax.yaxis.set_ticks_position('none')

# Add padding between axes and labels
ax.xaxis.set_tick_params(pad=5)
ax.yaxis.set_tick_params(pad=10)

# Add x,y gridlines
ax.grid(b=True,color='grey',linestyle='-.',linewidth=0.5,alpha=0.2)

plt.xlabel('Sport',fontweight='bold',color = 'orange',fontsize='18')
plt.ylabel('Medal Count',fontsize='18',labelpad=25)


#legend size
ax.legend(prop={'size': 11})
rects = ax.patches

#annotate total values
for rect,label in zip(rects,dfp['total']):

    height = rect.get_height()
    ax.text(rect.get_x() + rect.get_width() / 2,height,label,ha='center',va='center')
plt.show()

数据集可以在这里找到:https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results

谁能向我解释如何获得总高度?

数据样本

ID,Name,Sex,Age,Height,Weight,Team,NOC,Games,Year,Season,City,Sport,Event,Medal
1,A Dijiang,M,24.0,180.0,80.0,China,CHN,1992 Summer,1992,Summer,Barcelona,Basketball,Basketball Men's Basketball,2,A Lamusi,23.0,170.0,60.0,2012 Summer,2012,London,Judo,Judo Men's Extra-Lightweight,3,Gunnar Nielsen Aaby,Denmark,DEN,1920 Summer,1920,Antwerpen,Football,Football Men's Football,4,Edgar Lindenau Aabye,34.0,Denmark/Sweden,1900 Summer,1900,Paris,Tug-Of-War,Tug-Of-War Men's Tug-Of-War,Gold
5,Christine Jacoba Aaftink,F,21.0,185.0,82.0,Netherlands,NED,1988 Winter,1988,Winter,Calgary,Speed Skating,Speed Skating Women's 500 metres,5,"Speed Skating Women's 1,000 metres",25.0,1992 Winter,Albertville,27.0,1994 Winter,1994,Lillehammer,6,Per Knut Aaland,31.0,188.0,75.0,United States,USA,Cross Country Skiing,Cross Country Skiing Men's 10 kilometres,Cross Country Skiing Men's 50 kilometres,Cross Country Skiing Men's 10/15 kilometres Pursuit,Cross Country Skiing Men's 4 x 10 kilometres Relay,33.0,Cross Country Skiing Men's 30 kilometres,7,John Aalberg,183.0,72.0,8,"Cornelia ""Cor"" Aalten (-Strannood)",18.0,168.0,1932 Summer,1932,Los Angeles,Athletics,Athletics Women's 100 metres,Athletics Women's 4 x 100 metres Relay,9,Antti Sami Aalto,26.0,186.0,96.0,Finland,FIN,2002 Winter,2002,Salt Lake City,Ice Hockey,Ice Hockey Men's Ice Hockey,10,"Einar Ferdinand ""Einari"" Aalto",1952 Summer,1952,Helsinki,Swimming,Swimming Men's 400 metres Freestyle,11,Jorma Ilmari Aalto,22.0,182.0,76.5,1980 Winter,1980,Lake Placid,12,Jyri Tapani Aalto,172.0,70.0,2000 Summer,2000,Sydney,Badminton,Badminton Men's Singles,13,Minna Maarit Aalto,30.0,159.0,55.5,1996 Summer,1996,Atlanta,Sailing,Sailing Women's Windsurfer,14,Pirjo Hannele Aalto (Mattila-),32.0,171.0,65.0,Biathlon,Biathlon Women's 7.5 kilometres Sprint,15,Arvo Ossian Aaltonen,1912 Summer,1912,Stockholm,Swimming Men's 200 metres Breaststroke,Swimming Men's 400 metres Breaststroke,bronze
15,1924 Summer,1924,16,Juhamatti Tapio Aaltonen,28.0,184.0,85.0,2014 Winter,2014,Sochi,bronze
17,Paavo Johannes Aaltonen,175.0,64.0,1948 Summer,1948,Gymnastics,Gymnastics Men's Individual All-Around,Gymnastics Men's Team All-Around,Gold
17,Gymnastics Men's Floor Exercise,17,Gymnastics Men's Horse Vault,Gymnastics Men's Parallel Bars,Gymnastics Men's Horizontal Bar,Gymnastics Men's Rings,Gymnastics Men's Pommelled Horse,18,Timo Antero Aaltonen,189.0,130.0,Athletics Men's Shot Put,19,Win Valdemar Aaltonen,54.0,Art Competitions,"Art Competitions Mixed Sculpturing,UnkNown Event",20,Kjetil Andr Aamodt,20.0,176.0,norway,nor,Alpine Skiing,Alpine Skiing Men's Downhill,Alpine Skiing Men's Super G,Gold
20,Alpine Skiing Men's Giant Slalom,bronze
20,Alpine Skiing Men's Slalom,Silver
20,Alpine Skiing Men's Combined,1998 Winter,1998,Nagano,2006 Winter,2006,Torino,Gold
21,Ragnhild Margrethe Aamodt,163.0,2008 Summer,2008,Beijing,Handball,Handball Women's Handball,Gold
22,Andreea Aanei,125.0,Romania,ROU,2016 Summer,2016,Rio de Janeiro,Weightlifting,Weightlifting Women's Super-Heavyweight,23,Fritz Aanes,187.0,89.0,Wrestling,"Wrestling Men's Light-Heavyweight,Greco-Roman",2004 Summer,2004,Athina,24,Nils Egil Aaness,1960 Winter,1960,Squaw Valley,Speed Skating Men's 500 metres,"Speed Skating Men's 1,500 metres",1964 Winter,1964,Innsbruck,25,Alf Lied Aanning,"Gymnastics Men's Team All-Around,Free System",Silver
26,Agnes Erika Aanonsen (-Eyde),17.0,169.0,1984 Winter,1984,Sarajevo,Luge,Luge Women's Singles,27,Johan Aantjes,1984 Summer,Water Polo,Water Polo Men's Water Polo,28,Jan-Erik Aarberg,43.0,77.0,1968 Summer,1968,Mexico City,Sailing Mixed Three Person Keelboat,47.0,1972 Summer,1972,Munich,29,Willemien Aardenburg,1988 Summer,SEOul,Hockey,Hockey Women's Hockey,bronze
30,Pepijn Aardewijn,Rowing,Rowing Men's Lightweight Double Sculls,Silver
30,31,Evald rma (rman-),174.0,Estonia,EST,1936 Summer,1936,Berlin,Athletics Men's Pole Vault,32,Olav Augunson Aarnes,Athletics Men's High Jump,33,Mika Lauri Aarnikka,76.0,Sailing Men's Two Person Dinghy,34,Jamale (Djamel-) Aarrass (Ahrass-),France,FRA,"Athletics Men's 1,35,Dagfinn sverre Aarskog,190.0,98.0,Bobsleigh,Bobsleigh Men's Four,

解决方法

使用数据框中的总值作为 y 位置,而不是条的高度。类似的东西:

#annotate total values
for rect,total in zip(rects,dfp['total']):
    ax.text(rect.get_x() + rect.get_width() / 2,total,ha='center',va='center')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。