-
Notifications
You must be signed in to change notification settings - Fork 0
/
gantt.py
115 lines (94 loc) · 3.31 KB
/
gantt.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import datetime
import matplotlib
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
# Periodo 27/03 - 31/05
start = datetime.datetime.strptime("27-03", "%d-%m")
end = datetime.datetime.strptime("02-06", "%d-%m")
date_range = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
x_axis = list(range(1, len(date_range)+1))
# Associa cada data à um número
mapDateTime = {}
counter = 1
for date in date_range:
mapDateTime[date] = counter
counter += 1
# Formato dos dados: ('Nome da Série', [ ('dataBarra', duracao)], 'Texto inicial', 'Texto final')
tuplas = [
('Space Force', [
("30-05", 3)
], 'S01E01-S01E10', ''),
('The Crown', [
("26-05", 1)
], '', 'S01E01'),
('Defending Jacob', [
("23-05", 2), ("29-05", 1)
], 'S01E01', 'S01E08'),
('Westworld', [
("17-05", 1), ("21-05", 1), ("23-05", 1), ("25-05", 1), ("27-05", 2), ("01-06", 1)
], 'S01E01', 'S01E09'),
('Fleabag', [
("14-05", 6)
], 'S01E01', 'S02E06'),
('Rick and Morty', [
("05-05", 1), ("13-05", 1), ("21-05", 1), ("25-05", 1)
], 'S04E06', 'S04E09'),
('The Man in the High Castle', [
("27-04", 2), ("30-04", 16)
], 'S01E01', 'S04E10'),
('The Good Place', [
("25-04", 6)
], 'S01E01', 'S04E13'),
('FBI: Most Wanted', [
("23-04", 1),("25-04", 1),("30-04", 2),("11-05", 1)
], 'S01E10', 'S01E14'),
('Brooklyn Nine-Nine', [
("28-03", 28)
], 'S01E01', 'S07E13'),
('Doctor Who', [
("27-03", 1),("29-03", 1),("31-03", 1),("08-04", 1),
("20-04", 1),("25-04", 1),("07-05", 1),("15-05", 6)
], 'S11E01', 'S12E10')
]
barsShows = {}
# Inicia as listas de barras de cada show
for i in range(len(tuplas)):
barsShows[i] = []
# Cria uma barra de comprimento duration a partir do dia dayString
def createBar(show, dayString, duration):
day = datetime.datetime.strptime(dayString, "%d-%m")
mapped = mapDateTime[day] # busca a posição em x da data
barsShows[show].append((mapped, duration))
ylabels = []
for i, v in enumerate(tuplas):
ylabels.append(v[0]) # Nome da série
for periodo in v[1]:
createBar(i, periodo[0], periodo[1]) # Cria a barra com data de inicio e duração
cmap = plt.cm.get_cmap('plasma_r')
colors = [cmap(i/(len(tuplas)+1)) for i in range(len(tuplas))]
# Configuração da figura
fig, gnt = plt.subplots()
plt.title("Séries assistidas durante a quarentena (27/03 - 01/06)")
gnt.grid(False)
gnt.set_ylim(-1, len(tuplas))
gnt.set_xlim(0, len(date_range)+1)
gnt.set_xlabel('Dia')
gnt.set_ylabel('Série')
gnt.set_xticks(x_axis)
ticks_y = list(range(len(ylabels)))
gnt.set_yticks(ticks_y)
gnt.set_yticklabels(ylabels)
desloc_y = 0.2
desloc_x_final = -2
tam_fonte = 8
for show in barsShows:
posInicial = barsShows[show][0][0] # posicao x da primeira barra
posFinal = barsShows[show][-1][0] + barsShows[show][-1][1] # posicao x da ultima barra + comprimento
textoInicial = tuplas[show][2]
textoFinal = tuplas[show][3]
if barsShows[show]:
for el in barsShows[show]:
gnt.barh(show, left=el[0], width=el[1], height=0.3, color=colors[show])
gnt.text(posInicial, show + desloc_y, textoInicial, fontSize=tam_fonte)
gnt.text(posFinal + desloc_x_final, show + desloc_y, textoFinal, fontSize=tam_fonte)
plt.show()