Created
July 5, 2022 06:52
-
-
Save craigderington/6309d0dbc39df2aba8ca8bb1ca6e149c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import fastf1 as ff1 | |
from fastf1 import plotting | |
from fastf1 import utils | |
from matplotlib import pyplot as plt | |
from matplotlib.pyplot import figure | |
import numpy as np | |
import pandas as pd | |
# enable the cache | |
ff1.Cache.enable_cache('cache') | |
year, grand_prix, session = 2022, 'Imola', 'FP1' | |
quali = ff1.get_session(year, grand_prix, session) | |
quali.load() # This is new with Fastf1 v.2.2 | |
# This is how it used to be: | |
# laps = quali.load_laps(with_telemetry=True) | |
driver_1, driver_2 = 'HAM', 'RUS' | |
# Laps can now be accessed through the .laps object coming from the session | |
laps_driver_1 = quali.laps.pick_driver(driver_1) | |
laps_driver_2 = quali.laps.pick_driver(driver_2) | |
# Select the fastest lap | |
fastest_driver_1 = laps_driver_1.pick_fastest() | |
fastest_driver_2 = laps_driver_2.pick_fastest() | |
# Retrieve the telemetry and add the distance column | |
telemetry_driver_1 = fastest_driver_1.get_telemetry().add_distance() | |
telemetry_driver_2 = fastest_driver_2.get_telemetry().add_distance() | |
# Make sure we know the team name for coloring | |
team_driver_1 = fastest_driver_1['Team'] | |
team_driver_2 = fastest_driver_2['Team'] | |
driver_1_color = ff1.plotting.team_color(team_driver_1) | |
driver_2_color = ff1.plotting.team_color(team_driver_2) | |
# if the drivers are on the same team, swap colors | |
if driver_1_color == driver_2_color: | |
if team_driver_1 != 'WIL': | |
driver_1_color = driver_1_color | |
driver_2_color = ff1.plotting.team_color('WIL') | |
else: | |
driver_1_color = ff1.plotting.team_color('WIL') | |
driver_2_color = driver_2_color | |
# Extract the delta time | |
delta_time, ref_tel, compare_tel = utils.delta_time(fastest_driver_1, fastest_driver_2) | |
plot_size = [15, 15] | |
plot_title = f"{quali.event.year} {quali.event.EventName} - {quali.name} - {driver_1} VS {driver_2}" | |
plot_ratios = [1, 3, 2, 1, 1, 2, 1] | |
plot_filename = plot_title.replace(" ", "") + ".png" | |
# Make plot a bit bigger | |
plt.rcParams['figure.figsize'] = plot_size | |
# Create subplots with different sizes | |
fig, ax = plt.subplots(7, gridspec_kw={'height_ratios': plot_ratios}) | |
# Set the plot title | |
ax[0].title.set_text(plot_title) | |
# Delta line | |
ax[0].plot(ref_tel['Distance'], delta_time) | |
ax[0].axhline(0) | |
ax[0].set(ylabel=f"Gap to {driver_2} (s)") | |
# Speed trace | |
ax[1].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Speed'], label=driver_1, color=driver_1_color) | |
ax[1].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Speed'], label=driver_2, color=driver_2_color) | |
ax[1].set(ylabel='Speed') | |
ax[1].legend(loc="lower right") | |
# Throttle trace | |
ax[2].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Throttle'], label=driver_1, color=driver_1_color) | |
ax[2].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Throttle'], label=driver_2, color=driver_2_color) | |
ax[2].set(ylabel='Throttle') | |
# Brake trace | |
ax[3].plot(telemetry_driver_1['Distance'], telemetry_driver_1['Brake'], label=driver_1, color=driver_1_color) | |
ax[3].plot(telemetry_driver_2['Distance'], telemetry_driver_2['Brake'], label=driver_2, color=driver_2_color) | |
ax[3].set(ylabel='Brake') | |
# Gear trace | |
ax[4].plot(telemetry_driver_1['Distance'], telemetry_driver_1['nGear'], label=driver_1, color=driver_1_color) | |
ax[4].plot(telemetry_driver_2['Distance'], telemetry_driver_2['nGear'], label=driver_2, color=driver_2_color) | |
ax[4].set(ylabel='Gear') | |
# RPM trace | |
ax[5].plot(telemetry_driver_1['Distance'], telemetry_driver_1['RPM'], label=driver_1, color=driver_1_color) | |
ax[5].plot(telemetry_driver_2['Distance'], telemetry_driver_2['RPM'], label=driver_2, color=driver_2_color) | |
ax[5].set(ylabel='RPM') | |
# DRS trace | |
ax[6].plot(telemetry_driver_1['Distance'], telemetry_driver_1['DRS'], label=driver_1, color=driver_1_color) | |
ax[6].plot(telemetry_driver_2['Distance'], telemetry_driver_2['DRS'], label=driver_2, color=driver_2_color) | |
ax[6].set(ylabel='DRS') | |
ax[6].set(xlabel='Lap distance (meters)') | |
# Hide x labels and tick labels for top plots and y ticks for right plots. | |
for a in ax.flat: | |
a.label_outer() | |
# Store figure | |
plt.savefig(plot_filename, dpi=600) | |
plt.show() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment