import tif1
import matplotlib.pyplot as plt
# Setup
tif1.plotting.setup_mpl(color_scheme='fastf1')
session = tif1.get_session(2023, 'Bahrain Grand Prix', 'Q')
# Calculate throttle distance
drivers = session.laps['Driver'].unique()
throttle_data = []
for driver in drivers:
try:
fastest_lap = session.laps.pick_drivers(driver).pick_fastest()
telemetry = fastest_lap.get_car_data().add_distance()
telemetry['Distance_delta'] = telemetry['Distance'].diff()
circuit_length = telemetry['Distance'].max()
full_throttle = telemetry[telemetry['Throttle'] >= 98]
throttle_distance = full_throttle['Distance_delta'].sum()
throttle_percentage = (throttle_distance / circuit_length) * 100
throttle_data.append({
'Driver': driver,
'Team': fastest_lap['Team'],
'ThrottlePercentage': round(throttle_percentage, 2)
})
except Exception:
continue
throttle_data.sort(key=lambda x: x['ThrottlePercentage'], reverse=True)
# Map to minimum for visualization
min_percentage = min(d['ThrottlePercentage'] for d in throttle_data)
for d in throttle_data:
d['PercentageDiff'] = d['ThrottlePercentage'] - min_percentage
# Plot
fig, ax = plt.subplots(figsize=(12, 8))
drivers_list = [d['Driver'] for d in throttle_data]
percentages_diff = [d['PercentageDiff'] for d in throttle_data]
percentages_actual = [d['ThrottlePercentage'] for d in throttle_data]
colors = [tif1.plotting.get_team_color(d['Team'], session) for d in throttle_data]
ax.barh(drivers_list, percentages_diff, color=colors, alpha=0.8, edgecolor='white', linewidth=1)
for i, (driver, percentage) in enumerate(zip(drivers_list, percentages_actual)):
ax.text(percentages_diff[i] + 0.1, i, f'{percentage:.1f}%', va='center', fontsize=10, fontweight='bold')
ax.set_xlabel('Distance at Full Throttle (relative difference)', fontsize=12, fontweight='bold')
ax.set_ylabel('Driver', fontsize=12, fontweight='bold')
ax.set_title('Bahrain GP Qualifying - Full Throttle Distance', fontsize=14, fontweight='bold')
ax.invert_yaxis()
ax.grid(axis='x', alpha=0.3, linestyle='--')
ax.set_xlim(left=0)
plt.tight_layout()
plt.show()