I have the following data frame:
land_cover canopy_cat count tc_density_cor
0 20 1 56 35.760967
1 20 2 28 35.760967
2 20 3 11 35.760967
3 20 4 9 35.760967
4 20 5 4 35.760967
5 20 6 3 35.760967
6 20 7 3 35.760967
7 20 8 1 35.760967
8 20 9 4 35.760967
9 20 10 6 35.760967
10 20 11 2 35.760967
11 30 1 194 17.408260
12 30 2 86 17.408260
13 30 3 55 17.408260
14 30 4 36 17.408260
15 30 5 21 17.408260
16 30 6 15 17.408260
17 30 7 9 17.408260
18 30 8 6 17.408260
19 30 9 19 17.408260
20 30 10 14 17.408260
21 30 11 9 17.408260
22 40 1 106 17.458283
23 40 2 45 17.458283
24 40 3 19 17.458283
25 40 4 14 17.458283
26 40 5 9 17.458283
27 40 6 8 17.458283
28 40 7 5 17.458283
29 40 8 5 17.458283
30 40 9 8 17.458283
31 40 10 12 17.458283
32 40 11 3 17.458283
and I want to plot my data as a stacked bar plot:
x-axis = land_cover
y-axis = count per canopy_cat
I think that the pivot function is what I am looking for. However before I want to normalize the "count" column for each land_cover relative to "tc_density_cor".
for example, the sum of "counts" for land_cover=20 = 127.
127/35.76 = 56/x --> new value would be: 15.76
How can I do that?? :)
I think you need:
df['Count Per Canopy Cat'] = (df['count'] * df['tc_density_cor'] /
df.groupby('land_cover')['count'].transform(sum))
df.pivot('land_cover',
'canopy_cat',
'Count Per Canopy Cat')\
.plot.bar(stacked=True, figsize=(15,8))
Chart: