У меня есть следующие данные и тепловая карта, и мне нужна помощь с форматированием линий сетки:
import pandas as pd
import numpy as np
data = [
['tom', 1, 1, 1, '0:00', '10:26'],
['tom', 1, 1, 2, '15:30', '18:50'],
['tom', 1, 2, 1, '2:00', '9:15'],
['tom', 1, 2, 2, '13:10', '22:40'],
['tom', 2, 1, 1, '5:00', '22:15'],
['tom', 2, 2, 1, '0:00', '13:40']
]
# Create the pandas DataFrame
df = pd.DataFrame(
columns=['Name',
'Day',
'AllottedPeriod',
'AttemptNo',
'StartTime',
'EndTime'],
data=data,
)
def parse_time_periods(x):
start_minute, start_second = x['StartTime'].split(':')
end_minute, end_second = x['EndTime'].split(':')
# calculate the start and end time in seconds
start = (int(start_minute) * 60) + int(start_second)
end = (int(end_minute) * 60) + int(end_second)
test_range = range(start, end)
for i in range(1, 26, 1):
# create range to check for intercection with testing time
time_range = range((i - 1) * 60, i * 60)
# create variables to indicate if there is overlap between
# test time and minute range. For example, if a test was active
# between minute 10 and minute 15, column `15` will be 1
if len(set(test_range).intersection(time_range)) > 0:
x[f'{i:02}'] = 1
return x
df = df.apply(lambda x: parse_time_periods(x), axis=1).fillna(0)
stacked_df = df.drop(columns=['StartTime', 'EndTime','AttemptNo']).groupby(
by=['Name', 'Day', 'AllottedPeriod']
).agg(sum).unstack().swaplevel(0, 1, 1).sort_index(1)
import seaborn as sns
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(10,3))
cmap = plt.cm.OrRd_r
ax = sns.heatmap(stacked_df,cbar=False,cmap=cmap)
plt.show()
введите описание изображения здесь
Как я могу вставить: а) горизонтальные линии сетки для каждой линии б) вертикальную линию сетки в точке 2-01
Просто пытаюсь понять, как. Любая помощь будет оценена по достоинству! Большое спасибо!