import matplotlib.pyplot as plt
import pandas as pd
raw_data = [
["1.", "Liptov. Ondrašová", "Chlapci", "00:00", "36:00", "36:00", "0", "36:00", "+2", "72:00", "IX.", 9],
["2.", "Liptovská Sielnica", "Prípravka", "03:00", "12:56", "9:56", "0", "9:56", "+4", "14:56", "2.", 2],
["3.", "Lipt. Porúbka", "Dievčatá", "07:00", "40:31", "33:31", "0", "33:31", "+3", "43:31", "2.", 2],
["4.", "Liptovský Trnovec", "Prípravka", "10:00", "19:58", "9:58", "0", "9:58", "+4", "17:58", "3.", 3],
["5.", "Vet. Poruba B", "Chlapci", "14:00", "45:19", "31:19", "0", "31:19", "+2", "49:19", "III.", 3],
["6.", "Liptov. Ondrašová", "Prípravka", "17:00", "26:49", "9:49", "0", "9:49", "+3", "14:49", "1.", 1],
["7.", "Vet. Poruba A", "Chlapci", "21:00", "46:21", "25:21", "17", "25:04", "+4", "37:04", "1.", 1],
["8.", "Krmeš – Vlachy", "Chlapci", "28:00", "64:06", "36:06", "0", "36:06", "+1", "63:06", "VIII.", 8],
["9.", "Liptov. Ondrašová", "Dievčatá", "35:00", "70:12", "35:12", "0", "35:12", "+1", "68:12", "5.", 5],
["10.", "Konská", "Chlapci", "42:00", "76:16", "34:40", "0", "34:40", "+2", "60:40", "VI.", 6],
["11.", "Lipt. Porúbka B", "Chlapci", "49:00", "82:42", "33:42", "0", "33:42", "+1", "54:42", "V.", 5],
["12.", "Lipt. Porúbka A", "Chlapci", "56:00", "86:35", "30:35", "0", "30:35", "+2", "46:35", "II.", 2],
["13.", "Lipt. Porúbka A", "Dievčatá", "63:00", "89:28", "26:28", "0", "26:28", "+3", "35:28", "1.", 1],
["14.", "Krmeš – Vlachy", "Dievčatá", "70:00", "111:39", "41:39", "0", "41:39", "+1", "86:39", "6.", 6],
["15.", "Lipt. Sielnica B", "Dievčatá", "77:00", "113:16", "36:16", "4:20", "31:56", "+1", "57:56", "4.", 4],
["16.", "Lipt. Sielnica A", "Dievčatá", "84:00", "117:07", "33:07", "0", "33:07", "+3", "48:07", "3.", 3],
["17.", "Lipt. Trnovec", "Chlapci", "91:00", "122:37", "31:37", "0", "31:37", "+3", "52:37", "IV.", 4],
["18.", "Vet. Poruba C", "Chlapci", "98:00", "133:26", "35:26", "0", "35:26", "+0", "62:26", "VII.", 7],
["19.", "Lipt. Hrádok", "Dievčatá", "105:00", "151:22", "46:22", "0", "46:22", "+2", "115:22", "7.", 7]
]
def norm_kat(kat_code):
if kat_code.lower() == 'ch':
return 'Chlapci'
elif kat_code.lower() == 'd':
return 'Dievčatá'
elif kat_code.lower() in ['pr', 'pripravka']:
return 'Prípravka'
return kat_code
raw_data_norm = []
for row in raw_data:
r = list(row)
r[2] = norm_kat(r[2])
raw_data_norm.append(r)
df = pd.DataFrame(raw_data_norm, columns=[
"St_c", "Kolektiv", "Kategoria", "Cas_startu", "Cas_cieli",
"Cas_trate", "Zdrzanie", "Cisty_cas", "Vyh_body", "Vysl_cas", "Poradie_str", "Order_num"
])
cat_order = {'Chlapci': 1, 'Dievčatá': 2, 'Prípravka': 3}
df['Cat_order'] = df['Kategoria'].map(cat_order)
df_sorted = df.sort_values(by=["Cat_order", "Order_num"]).reset_index(drop=True)
columns = ["Por.", "Kategória", "Kolektív - DHZ", "Šť. č.", "Čistý čas", "Výh. body", "Výsledný čas"]
table_data = []
for idx, row in df_sorted.iterrows():
table_data.append([
row["Poradie_str"],
row["Kategoria"],
row["Kolektiv"],
row["St_c"],
row["Cisty_cas"],
row["Vyh_body"],
row["Vysl_cas"]
])
fig, ax = plt.subplots(figsize=(12, 12), dpi=300)
ax.axis('off')
plt.suptitle("VÝSLEDKOVÁ LISTINA PODĽA KATEGÓRIÍ A UMIESTNENIA\nJesenný branno-športový pretek – Konská (19.9.2026)",
fontsize=15, fontweight='bold', y=0.96, color='#1A2B4C')
table = ax.table(cellText=table_data, colLabels=columns, loc='center', cellLoc='center')
table.auto_set_font_size(False)
table.set_fontsize(10)
table.scale(1.2, 1.8)
cat_colors = {
'Chlapci': '#E8F0FE',
'Dievčatá': '#FCE8E6',
'Prípravka': '#E6F4EA'
}
for (row, col), cell in table.get_celld().items():
if row == 0:
cell.set_facecolor('#1A2B4C')
cell.set_text_props(color='white', fontweight='bold')
else:
kat = table_data[row-1][1]
bg_color = cat_colors.get(kat, '#FFFFFF')
cell.set_facecolor(bg_color)
por = table_data[row-1][0]
if por in ['1.', '2.', '3.', 'I.', 'II.', 'III.']:
if col in [0, 2, 6]:
cell.set_text_props(fontweight='bold')
plt.tight_layout()
filename = "Vysledkova_listina_Konska_Chlapci_Dievcata_Pripravka.jpg"
plt.savefig(filename, format='jpg', bbox_inches='tight', dpi=300)
print("Image saved successfully.")
Image saved successfully.