0

I am looking to align the numbers on my stack-bar chart (Preferably on the center). However, it appears that the placement of all the values are disoriented.

Below is sample of my code.

Can someone please help me with this.

Thank you.

current status of the stack-bar chart

# function to add value labels for bar chart
def addlabels(x, y):
    for i in range(len(x)):
        plt.text(i, y[i], y[i], ha = 'center')

x = ["Entry Level", "Non-Executive", "Junior Executive", "Senior Executive", "Manager", "Senior Manager", "Non Specified"]

show_phd = np.array([count_entry_phd, count_ne_phd, count_je_phd, count_se_phd, count_m_phd, count_sm_phd, count_ns_phd])

show_masters = np.array([count_entry_masters, count_ne_masters, count_je_masters, count_se_masters, count_m_masters, count_sm_masters, count_ns_masters])

show_bachelor = np.array([count_entry_bachelor, count_ne_bachelor, count_je_bachelor, count_se_bachelor, count_m_bachelor, count_sm_bachelor, count_ns_bachelor])

show_diploma = np.array([count_entry_diploma, count_ne_diploma, count_je_diploma, count_se_diploma, count_m_diploma, count_sm_diploma, count_ns_bachelor])

show_ni = np.array([count_entry_ni, count_ne_ni, count_je_ni, count_se_ni, count_m_ni, count_sm_ni, count_ns_ni])

fig = plt.figure(figsize=(10, 6))

plt.bar(x, show_phd, 0.2, label="PhD", color=['#EE837C'])
addlabels(x, show_phd)

plt.bar(x, show_masters, 0.2, bottom=show_phd, label="Masters", color=['#EBE882'])
addlabels(x, show_masters)

plt.bar(x, show_bachelor, 0.2, bottom=show_phd + show_masters, label="Bachelor", color ['#97F5CA'])
addlabels(x, show_bachelor)

plt.bar(x, show_diploma, 0.2, bottom=show_phd + show_masters + show_bachelor, label="Diploma", color=['#64EAF5'])
addlabels(x, show_diploma)

plt.bar(x, show_ni, 0.2, bottom=show_phd + show_masters + show_bachelor + show_diploma, label="Nitec", color=['#F0CE8C'])
addlabels(x, show_ni)

....

1 Answers1

1

Screenshot

How is the placement in the above image link? If that's what you want, the code is below.

import numpy as np
import matplotlib.pyplot as plt
import tkinter
from ctypes import windll
import pyautogui

windll.shcore.SetProcessDpiAwareness(1)

list_job_rank_name = ["Entry Level", "Non-Executive", "Junior Executive", "Senior Executive", "Manager", "Senior Manager"]
temp_counter = []
for x in list_job_rank_name:
    temp_counter.append(0)

def addlabels(list_num_this_cert_across_ranks,mylabel):
    global list_job_rank_name
    global temp_counter
    for each_rank_name in range(len(list_job_rank_name)):
        temp_counter[each_rank_name] = temp_counter[each_rank_name] + list_num_this_cert_across_ranks[each_rank_name]
        plt.text(each_rank_name, temp_counter[each_rank_name]-(list_num_this_cert_across_ranks[each_rank_name]/2.0), mylabel+":"+str(list_num_this_cert_across_ranks[each_rank_name]), ha = 'center')

phd_certs_per_rank = np.array([1,2,3,4,5,6])
masters_certs_per_rank = np.array([2,3,4,5,6,6])
bachelors_certs_per_rank = np.array([3,4,5,6,6,6])
diploma_certs_per_rank = np.array([4,5,6,6,6,6])
nitec_certs_per_rank = np.array([5,6,6,6,6,6])
root = tkinter.Tk()
root.geometry("{}x{}+{}+{}".format(1,1,0,0))
root.state('zoomed')
root.update_idletasks()
screen_width = root.winfo_width()
screen_height = root.winfo_height()
my_dpi = root.winfo_fpixels('1i')
root.destroy()
fig = plt.figure(figsize=(screen_width/my_dpi, screen_height/my_dpi))

plt.bar(list_job_rank_name, phd_certs_per_rank, 0.2, bottom=0, label="PhD", color=['#e93e3a'])
addlabels(phd_certs_per_rank,"PhD")
plt.bar(list_job_rank_name, masters_certs_per_rank, 0.2, bottom=phd_certs_per_rank , label="Masters", color=['#ed683c'])
addlabels(masters_certs_per_rank,"Masters")
plt.bar(list_job_rank_name, bachelors_certs_per_rank, 0.2, bottom=phd_certs_per_rank + masters_certs_per_rank , label="Bachelors", color=['#f3903f'])
addlabels(bachelors_certs_per_rank,"Bachelors")
plt.bar(list_job_rank_name, diploma_certs_per_rank, 0.2, bottom=phd_certs_per_rank + masters_certs_per_rank + bachelors_certs_per_rank , label="Diploma", color=['#fdc70c'])
addlabels(diploma_certs_per_rank,"Diploma")
plt.bar(list_job_rank_name, nitec_certs_per_rank, 0.2, bottom=phd_certs_per_rank + masters_certs_per_rank + bachelors_certs_per_rank + diploma_certs_per_rank , label="Nitec", color=['#fff33b'])
addlabels(nitec_certs_per_rank,"Nitec")

plt.show()
Josh
  • 76
  • 5