Spaces:
Runtime error
Runtime error
File size: 2,577 Bytes
bcf020e bb00581 c46cec1 f94c9eb 5a53c9e c46cec1 fb11f75 55a5cb3 38bec10 fb11f75 38bec10 fb11f75 bb00581 64f0dfb 38bec10 bb00581 87aae5e bb00581 c46cec1 bb00581 bcf020e e5d2e0d 0054bfa c46cec1 0054bfa bb00581 c46cec1 bb00581 c46cec1 bb00581 55a5cb3 c46cec1 bcf020e b3344b3 87aae5e 55a5cb3 87aae5e bb00581 c46cec1 bb00581 c46cec1 87aae5e 0054bfa 87aae5e c46cec1 bb00581 bcf020e ed4ba7d 0d0ff81 |
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 |
from shiny import App, ui, render, reactive
from shinywidgets import output_widget, render_widget
import fastf1 as ff1
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib import cm
import numpy as np
import os
from pathlib import Path
# Get the current directory
current_directory = Path.cwd()
# Specify the folder name you want to open (change 'folder_name' to your desired folder)
folder_name = 'cache'
# Create a Path object for the folder
folder_path = current_directory / folder_name
# Check if the cache folder exists
if folder_path.exists() and folder_path.is_dir():
print(f"The folder '{folder_name}' exists.")
else:
print(f"The folder '{folder_name}' does not exist.")
ff1.Cache.enable_cache(folder_path)
app_ui = ui.page_fluid(
ui.div(
ui.input_select(
"track", label="Track",
choices=["Austria", "Hungary", "Spanish Grand Prix"],
selected = "Austria"
),
class_="d-flex gap-3"
),
ui.output_plot("gear")
)
def server(input, output, session):
@reactive.Calc
def get_data():
f1_session = ff1.get_session(2023, input.track(), 'R')
f1_session.load()
lap = f1_session.laps.pick_fastest()
tel = lap.get_telemetry()
#converting data to numpy data tables
x = np.array(tel['X'].values)
y = np.array(tel['Y'].values)
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
gear = tel['nGear'].to_numpy().astype(float)
return points, segments, gear
@output
@render.plot
def gear():
points = get_data().points
segments = get_data().segments
gear = get_data().gear
cmap = cm.get_cmap('Paired')
lc_comp = LineCollection(segments, norm=plt.Normalize(1, cmap.N+1), cmap=cmap)
lc_comp.set_array(gear)
lc_comp.set_linewidth(4)
plt.gca().add_collection(lc_comp)
plt.axis('equal')
plt.tick_params(labelleft=False, left=False, labelbottom=False, bottom=False)
##title = plt.suptitle(
## f"Fastest Lap Gear Shift Visualization\n"
## f"{lap['Driver']} - {f1_session.event['EventName']} {f1_session.event.year}"
## )
cbar = plt.colorbar(mappable=lc_comp, label="Gear", boundaries=np.arange(1, 10))
cbar.set_ticks(np.arange(1.5, 9.5))
cbar.set_ticklabels(np.arange(1, 9))
return plt
app = App(app_ui, server) |