Saltar al contenido

¿Cómo trazar un gráfico de barras superpuesto usando matplotlib en python?

Hacemos una verificación completa cada una de las noticias de nuestro sitio web con el objetivo de enseñarte en todo momento la información más veraz y certera.

Solución:

Puede producir un gráfico de barras superpuestas usando plt.bar() con el alpha palabra clave como se muestra a continuación.

los alpha controla la transparencia de la barra.

nótese bien cuando tienes dos barras superpuestas, una con alfa < 1, obtendrás una mezcla de colores. Como tal, la barra aparecerá de color púrpura aunque la leyenda la muestre en rojo claro. Para aliviar esto, he modificado el ancho de una de las barras, de esta manera, incluso si tus poderes cambian, aún podrás ver ambas barras.

plt.xticks se puede usar para establecer la ubicación y el formato de las marcas x en su gráfico.

import matplotlib.pyplot as plt
import numpy as np

width = 0.8

highPower   = [1184.53,1523.48,1521.05,1517.88,1519.88,1414.98,
               1419.34,1415.13,1182.70,1165.17]
lowPower    = [1000.95,1233.37, 1198.97,1198.01,1214.29,1130.86,
               1138.70,1104.12,1012.95,1000.36]

indices = np.arange(len(highPower))

plt.bar(indices, highPower, width=width, 
        color='b', label='Max Power in mW')
plt.bar([i+0.25*width for i in indices], lowPower, 
        width=0.5*width, color='r', alpha=0.5, label='Min Power in mW')

plt.xticks(indices+width/2., 
           ['T'.format(i) for i in range(len(highPower))] )

plt.legend()

plt.show()

Gráfico

Sobre la base de la respuesta de @Ffisegydd, si sus datos están en un Pandas DataFrame, esto debería funcionar bien:

def overlapped_bar(df, show=False, width=0.9, alpha=.5,
                   title='', xlabel='', ylabel='', **plot_kwargs):
    """Like a stacked bar chart except bars on top of each other with transparency"""
    xlabel = xlabel or df.index.name
    N = len(df)
    M = len(df.columns)
    indices = np.arange(N)
    colors = ['steelblue', 'firebrick', 'darksage', 'goldenrod', 'gray'] * int(M / 5. + 1)
    for i, label, color in zip(range(M), df.columns, colors):
        kwargs = plot_kwargs
        kwargs.update('color': color, 'label': label)
        plt.bar(indices, df[label], width=width, alpha=alpha if i else 1, **kwargs)
        plt.xticks(indices + .5 * width,
                   [''.format(idx) for idx in df.index.values])
    plt.legend()
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    if show:
        plt.show()
    return plt.gcf()

Y luego en una línea de comando de python:

low = [1000.95, 1233.37, 1198.97, 1198.01, 1214.29, 1130.86, 1138.70, 1104.12, 1012.95, 1000.36]
high = [1184.53, 1523.48, 1521.05, 1517.88, 1519.88, 1414.98, 1419.34, 1415.13, 1182.70, 1165.17]
df = pd.DataFrame(np.matrix([high, low]).T, columns=['High', 'Low'],
                  index=pd.Index(['T%s' %i for i in range(len(high))],
                  name='Index'))
overlapped_bar(df, show=False)

gráfico de barras superpuestas en matplotlib

En realidad, es más simple de lo que parecen las respuestas en Internet.

a = range(1,10)
b = range(4,13)
ind = np.arange(len(a))

fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(x=ind, height=a, width=0.35,align='center')
ax.bar(x=ind, height=b, width=0.35/3,  align='center')

plt.xticks(ind, a)

plt.tight_layout()
plt.show()

ingrese la descripción de la imagen aquí

Puntuaciones y reseñas

Tienes la opción de añadir valor a nuestro contenido contribuyendo tu veteranía en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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