Python | Diagrama de Gantt básico usando Matplotlib

Requisitos previos: Introducción a Matplotlib
En este artículo, discutiremos cómo trazar un diagrama de Gantt en Python usando Matplotlib.
Un diagrama de Gantt es una representación gráfica de un cronograma de proyecto o cronograma de tareas (en el sistema operativo). Es un tipo de gráfico de barras que muestra las fechas de inicio y finalización de varios elementos de un proyecto que incluyen recursos o fecha límite. El primer diagrama de Gantt fue ideado a mediados de la década de 1890 por Karol Adamiecki, un ingeniero polaco que dirigía una acería en el sur de Polonia y se había interesado en las ideas y técnicas de gestión. Unos 15 años después de Adamiecki, Henry Gantt, un ingeniero estadounidense y consultor de gestión de proyectos, ideó su propia versión del gráfico, que se hizo famoso como «Gráficos de Gantt».
Algunos usos de los diagramas de Gantt: 
 

  • Programación de proyectos.
  • Programación de tareas en procesadores

A continuación se muestra un diagrama de Gantt de muestra para la programación de tareas: 
 

Usaremos los tipos de gráfico broken_barh disponibles en matplotlib para dibujar diagramas de Gantt.
A continuación se muestra el código para generar el diagrama de Gantt anterior: 
 

Python3

# Importing the matplotlib.pyplot
import matplotlib.pyplot as plt
 
# Declaring a figure "gnt"
fig, gnt = plt.subplots()
 
# Setting Y-axis limits
gnt.set_ylim(0, 50)
 
# Setting X-axis limits
gnt.set_xlim(0, 160)
 
# Setting labels for x-axis and y-axis
gnt.set_xlabel('seconds since start')
gnt.set_ylabel('Processor')
 
# Setting ticks on y-axis
gnt.set_yticks([15, 25, 35])
# Labelling tickes of y-axis
gnt.set_yticklabels(['1', '2', '3'])
 
# Setting graph attribute
gnt.grid(True)
 
# Declaring a bar in schedule
gnt.broken_barh([(40, 50)], (30, 9), facecolors =('tab:orange'))
 
# Declaring multiple bars in at same level and same width
gnt.broken_barh([(110, 10), (150, 10)], (10, 9),
                         facecolors ='tab:blue')
 
gnt.broken_barh([(10, 50), (100, 20), (130, 10)], (20, 9),
                                  facecolors =('tab:red'))
 
plt.savefig("gantt1.png")

Entendamos las diferentes piezas de códigos uno por uno: 

fig, gnt = plt.subplots()
  • Aquí, declaramos una cifra «gnt» para trazar el gráfico. 
gnt.set_ylim(0, 50)
gnt.set_xlim(0, 160)
  • Aquí, declaramos los límites del eje X y el eje Y del gráfico. De forma predeterminada, el límite inferior del eje X y el eje Y es 0 y los límites superiores para ambos ejes son 5 unidades más que el valor más alto del eje X y el valor del eje Y. 
gnt.set_xlabel('seconds since start')
gnt.set_ylabel('Processor')
  • Aquí, agregamos etiquetas a los ejes. Por defecto, no hay etiquetas. 
gnt.set_yticks([15, 25, 35])
gnt.set_yticklabels(['1', '2', '3'])
  • Aquí, agregamos marcas en el eje Y. También podemos etiquetarlos. Por defecto, los ejes se dividen uniformemente en los límites. 
gnt.grid(True)
  • Aquí, establecemos grid() en True para mostrar las cuadrículas. Por defecto, es Falso. 
gnt.broken_barh([(40, 50)], (30, 9), facecolors=('tab:orange'))
  • Aquí, agregamos una barra en el gráfico. En este ejemplo, esta barra representa la operación que se lleva a cabo durante un tiempo de 40 a (40+50) = 90 segundos.
    Los argumentos básicos: 
gnt.broken_barh([(start_time, duration)],
                 (lower_yaxis, height),
                 facecolors=('tab:colours'))
  • Por defecto, el color se establece en azul.
    Podemos declarar varias barras al mismo tiempo: 
gnt.broken_barh([(10, 50), (100, 20), (130, 10)], (20, 9),
                                  facecolors=('tab:red'))
  • También podemos agregar color de borde configurando el atributo «color de borde» a cualquier color. 
plt.savefig("gantt1.png")
  • Guardamos la figura formada en el archivo png. 

Referencia: Ejemplo de Broken Barh Documentación de Matplotlib

Publicación traducida automáticamente

Artículo escrito por AyushShukla8 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 *