¿Cómo separar grupos de barras apiladas en pandas?

Resuelto VERBOSE asked hace 10 meses • 1 respuestas

Mi entrada es este marco de datos:

df = pd.DataFrame(
    {
        'ID': ['ID001', 'ID002', 'ID003'],
        'RUNNING': [5, 6, 3],
        'QUEUE': [1, 2, 5],
        'FINISHED': [6, 2, 4],
        'PROCESSED': [2, 6, 4],
    }
)

      ID  RUNNING  QUEUE  FINISHED  PROCESSED
0  ID001        5      1         6          2
1  ID002        6      2         2          6
2  ID003        3      5         4          4

Estoy intentando crear grupos de barras apiladas que separen las tareas en ejecución y finalizadas para cada identificación.

Hice el siguiente código pero hay tres problemas:

  • las marcas x no muestran el nombre de los identificadores
  • no hay espacio entre cada par de barras apiladas.
  • el gráfico está truncado por la izquierda
running = df[['RUNNING', 'QUEUE']]
finished = df[['FINISHED', 'PROCESSED']]

fig, ax = plt.subplots(figsize=(7, 3))

running.plot(
    kind='bar',
    stacked=True,
    ax=ax,
    use_index=True,
    color={'RUNNING': 'orange', 'QUEUE': 'yellow'},
    edgecolor='black',
    position=1,
)
finished.plot(
    kind='bar',
    stacked=True,
    ax=ax,
    use_index=True,
    color={'FINISHED': 'green', 'PROCESSED': 'blue'},
    edgecolor='black',
    position=0,
)

fig.tight_layout()

plt.show()

ingrese la descripción de la imagen aquí

Espero 3 grupos (un grupo para cada identificación) y cada grupo tendrá dos barras apiladas.

¿Pueden mostrarme cómo arreglar mi código?

VERBOSE avatar Feb 15 '24 22:02 VERBOSE
Aceptado

Sólo necesitas modificar los anchos de las barras. Son demasiado anchos y se superponen entre sí:

# `color` param doesn't wok for me, maybe I have an older version of mpl
ax = df[['RUNNING','QUEUE']].plot.bar(position=1,stacked=True, width=0.3, hatch='/')
df[['FINISHED','PROCESSED']].plot.bar(position=0,stacked=True, ax=ax, width=0.3)

Producción:

ingrese la descripción de la imagen aquí

Quang Hoang avatar Feb 15 '2024 16:02 Quang Hoang