
# https://www.globalsino.com/ICs/
# Horizontal stacked bar of percentage

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# data
labels = ['A', 'B', 'C', 'D', 'E']    
TeamAOriginal = [1, 45, 28, 11, 4]
TeamBOriginal = [3, 58, 17, 8, 3]
TeamCOriginal = [1, 44, 30, 11, 3]

PercentA0 = TeamAOriginal[0]/(TeamAOriginal[0]+TeamBOriginal[0]+TeamCOriginal[0])
PercentA1 = TeamAOriginal[1]/(TeamAOriginal[1]+TeamBOriginal[1]+TeamCOriginal[1])
PercentA2 = TeamAOriginal[2]/(TeamAOriginal[2]+TeamBOriginal[2]+TeamCOriginal[2])
PercentA3 = TeamAOriginal[3]/(TeamAOriginal[3]+TeamBOriginal[3]+TeamCOriginal[3])
PercentA4 = TeamAOriginal[4]/(TeamAOriginal[4]+TeamBOriginal[4]+TeamCOriginal[4])


PercentB0 = TeamBOriginal[0]/(TeamAOriginal[0]+TeamBOriginal[0]+TeamCOriginal[0])
PercentB1 = TeamBOriginal[1]/(TeamAOriginal[1]+TeamBOriginal[1]+TeamCOriginal[1])
PercentB2 = TeamBOriginal[2]/(TeamAOriginal[2]+TeamBOriginal[2]+TeamCOriginal[2])
PercentB3 = TeamBOriginal[3]/(TeamAOriginal[3]+TeamBOriginal[3]+TeamCOriginal[3])
PercentB4 = TeamBOriginal[4]/(TeamAOriginal[4]+TeamBOriginal[4]+TeamCOriginal[4])

PercentC0 = TeamCOriginal[0]/(TeamAOriginal[0]+TeamBOriginal[0]+TeamCOriginal[0])
PercentC1 = TeamCOriginal[1]/(TeamAOriginal[1]+TeamBOriginal[1]+TeamCOriginal[1])
PercentC2 = TeamCOriginal[2]/(TeamAOriginal[2]+TeamBOriginal[2]+TeamCOriginal[2])
PercentC3 = TeamCOriginal[3]/(TeamAOriginal[3]+TeamBOriginal[3]+TeamCOriginal[3])
PercentC4 = TeamCOriginal[4]/(TeamAOriginal[4]+TeamBOriginal[4]+TeamCOriginal[4])

TeamA = [PercentA0, PercentA1, PercentA2, PercentA3, PercentA4]
TeamB = [PercentB0, PercentB1, PercentB2, PercentB3, PercentB4]
TeamC = [PercentC0, PercentC1, PercentC2, PercentC3, PercentC4]

# create a dict with the keys as the desired legend labels
data = {'labels': labels, 'TeamA': TeamA, 'TeamB': TeamB, 'TeamC': TeamC}
# create dataframe
df = pd.DataFrame(data)

ax = df.plot(kind='barh', x='labels', width=0.9, figsize=(12, 10), xlabel='',
             color=['#b02a2a', '#055cad', '#0b7d53'], stacked=True)
ax.set_xlabel('Percentage (%)', fontsize=15)
ax.set_xlim(0, 1)

ax.legend(loc='upper right', frameon=False, fontsize=15, markerscale=2)

for c in ax.containers:
    labels = [f'{w:.0f}' if (w := v.get_width()) > 1 else '' for v in c]
    ax.bar_label(c, labels=labels, label_type='center', padding=1, size=15)
    
ax.tick_params(axis='both', which='both', labelsize=15)
ax.spines[['top', 'right']].set_visible(False)

plt.show()
