-1

Hi guys I'm having a trouble on making a stacked bar chart here is my df

In[]top_10_medals_breakdown = pd.DataFrame()
    top_10_medals_breakdown = top_10_medals_breakdown.append(d)
    top_10_medals_breakdown
Out[]
    Noc Medal   Count
342 USA Bronze  1358
343 USA Gold    2638
344 USA Silver  1641
336 URS Bronze  689
337 URS Gold    1082
338 URS Silver  732
124 GER Bronze  746
125 GER Gold    745
126 GER Silver  674
115 GBR Bronze  651
116 GBR Gold    678
117 GBR Silver  739
108 FRA Bronze  666
109 FRA Gold    501
110 FRA Silver  610
167 ITA Bronze  531
168 ITA Gold    575
169 ITA Silver  531
296 SWE Bronze  535
297 SWE Gold    479
298 SWE Silver  522
48  CAN Bronze  451
49  CAN Gold    463
50  CAN Silver  438
14  AUS Bronze  517
15  AUS Gold    348
16  AUS Silver  455
142 HUN Bronze  371
143 HUN Gold    432
144 HUN Silver  332

Here is my attempted bar column which only read the Gold medal count

plt.bar(top_10_medals_breakdown['Noc'], top_10_medals_breakdown['Count'], color='b')

It only counts the gold medals

so tl:dr I want to make a stacked bar chart that counts the medal of each of the countries

  • 1
    It's a duplicate of https://stackoverflow.com/questions/23415500/pandas-plotting-a-stacked-bar-chart – Artyom Akselrod Jun 09 '20 at 08:42
  • Welcome to SO! Can you check https://stackoverflow.com/questions/47138271/how-to-create-a-stacked-bar-chart-for-my-dataframe-using-seaborn ? – sam Jun 09 '20 at 08:42
  • you need to groupby medal and count, right now you graph only knows NOC and couunt – Ahmed Sunny Jun 09 '20 at 08:42

1 Answers1

0

Use pivot to lay out the data, and then use the order of stacking and descending gold medals. Organized the data. We have graphed it.

import pandas as pd
import numpy as np
import io

data = '''
 Noc Medal Count
342 USA Bronze 1358
343 USA Gold 2638
344 USA Silver 1641
336 URS Bronze 689
337 URS Gold 1082
338 URS Silver 732
124 GER Bronze 746
125 GER Gold 745
126 GER Silver 674
115 GBR Bronze 651
116 GBR Gold 678
117 GBR Silver 739
108 FRA Bronze 666
109 FRA Gold 501
110 FRA Silver 610
167 ITA Bronze 531
168 ITA Gold 575
169 ITA Silver 531
296 SWE Bronze 535
297 SWE Gold 479
298 SWE Silver 522
48 CAN Bronze 451
49 CAN Gold 463
50 CAN Silver 438
14 AUS Bronze 517
15 AUS Gold 348
16 AUS Silver 455
142 HUN Bronze 371
143 HUN Gold 432
144 HUN Silver 332
'''

df = pd.read_csv(io.StringIO(data), sep='\s+')

df3 = df.pivot(columns='Medal', index='Noc', values='Count')
df3.sort_values('Gold', ascending=False, inplace=True)
df3 = df3.iloc[:,[1,2,0]]

df3
Medal   Bronze  Gold    Silver
Noc         
USA 1358 2638 1641
URS 689 1082 732
GER 746 745 674
GBR 651 678 739
ITA 531 575 531
FRA 666 501 610
SWE 535 479 522
CAN 451 463 438
HUN 371 432 332
AUS 517 348 455

enter image description here

r-beginners
  • 31,170
  • 3
  • 14
  • 32