Gráfica de barra de porcentaje apilada en MatPlotLib

Un gráfico de barras de porcentaje apilado es un gráfico de barras simple en forma apilada con un porcentaje de cada subgrupo en un grupo. Los diagramas de barras apiladas representan diferentes grupos uno encima del otro. La altura de la barra depende de la altura resultante de la combinación de los resultados de los grupos. Va desde abajo hasta el valor en lugar de ir desde cero hasta el valor. Un gráfico de barras apiladas de porcentaje es casi lo mismo que un gráfico de barras apiladas . Los subgrupos se muestran uno encima del otro, pero los datos se normalizan para que la suma de cada subgrupo sea igual al total de cada uno. 

El conjunto de datos utilizado en los siguientes ejemplos se muestra a continuación:

El conjunto de datos se puede descargar desde aquí .

Procedimiento: El procedimiento para dibujar el gráfico de barras de porcentaje apilado son los siguientes pasos que se describen a continuación con ejemplos:

1. Dibuje un gráfico de barras apiladas utilizando datos (conjunto de datos, diccionario, etc.).

Python3

# importing packages
import pandas as pd
import matplotlib.pyplot as plt
  
# load dataset
df = pd.read_excel("Hours.xlsx")
  
# view dataset
print(df)
  
# plot a Stacked Bar Chart using matplotlib
df.plot(
    x = 'Name',
    kind = 'barh',
    stacked = True,
    title = 'Stacked Bar Graph',
    mark_right = True)

Producción:

    Name   Studied     Slept      Other
0    Ram  4.855064  9.639962   9.504974
1   Yash  8.625440  0.058927  15.315634
2  Alpha  3.828192  0.723199  19.448609
3   Deep  7.150955  3.899420  12.949625
4   Alex  6.477900  8.198181   9.323919
5   Jack  1.922270  1.331427  20.746303
6  Sufia  8.978216  0.993438  14.028347

2. Agregue porcentaje en subgrupos de cada grupo.

Python3

# importing packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
  
# load dataset
df = pd.read_excel("Hours.xlsx")
  
# view dataset
print(df)
  
# plot a Stacked Bar Chart using matplotlib
df.plot(
  x = 'Name', 
  kind = 'barh', 
  stacked = True, 
  title = 'Percentage Stacked Bar Graph', 
  mark_right = True)
  
df_total = df["Studied"] + df["Slept"] + df["Other"]
df_rel = df[df.columns[1:]].div(df_total, 0)*100
  
for n in df_rel:
    for i, (cs, ab, pc) in enumerate(zip(df.iloc[:, 1:].cumsum(1)[n], 
                                         df[n], df_rel[n])):
        plt.text(cs - ab / 2, i, str(np.round(pc, 1)) + '%', 
                 va = 'center', ha = 'center')

Producción:

     Name   Studied     Slept      Other
0    Ram  4.855064  9.639962   9.504974
1   Yash  8.625440  0.058927  15.315634
2  Alpha  3.828192  0.723199  19.448609
3   Deep  7.150955  3.899420  12.949625
4   Alex  6.477900  8.198181   9.323919
5   Jack  1.922270  1.331427  20.746303
6  Sufia  8.978216  0.993438  14.028347

3. Edite el gráfico con algunas funciones (opcional).

Python3

# importing packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
  
# load dataset
df = pd.read_xlsx("Hours.xlsx")
  
# view dataset
print(df)
  
# plot a Stacked Bar Chart using matplotlib
df.plot(
  x = 'Name', 
  kind = 'barh', 
  stacked = True, 
  title = 'Percentage Stacked Bar Graph', 
  mark_right = True)
  
df_total = df["Studied"] + df["Slept"] + df["Other"]
df_rel = df[df.columns[1:]].div(df_total, 0) * 100
  
for n in df_rel:
    for i, (cs, ab, pc) in enumerate(zip(df.iloc[:, 1:].cumsum(1)[n], 
                                         df[n], df_rel[n])):
        plt.text(cs - ab / 2, i, str(np.round(pc, 1)) + '%', 
                 va = 'center', ha = 'center', rotation = 20, fontsize = 8)

Producción:

    Name   Studied     Slept      Other
0    Ram  4.855064  9.639962   9.504974
1   Yash  8.625440  0.058927  15.315634
2  Alpha  3.828192  0.723199  19.448609
3   Deep  7.150955  3.899420  12.949625
4   Alex  6.477900  8.198181   9.323919
5   Jack  1.922270  1.331427  20.746303
6  Sufia  8.978216  0.993438  14.028347

Publicación traducida automáticamente

Artículo escrito por deepanshu_rustagi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *