# Sort by downforce metric
downforce_data.sort(key=lambda x: x['Metric'], reverse=True)
# Map to minimum value to make differences more apparent
min_metric = min(d['Metric'] for d in downforce_data)
for d in downforce_data:
d['MetricDiff'] = d['Metric'] - min_metric
fig, ax = plt.subplots(figsize=(12, 8))
drivers_list = [d['Driver'] for d in downforce_data]
metrics_diff = [d['MetricDiff'] for d in downforce_data]
metrics_actual = [d['Metric'] for d in downforce_data]
colors = [tif1.plotting.get_team_color(d['Team'], session) for d in downforce_data]
# Create bars with relative differences
bars = ax.barh(drivers_list, metrics_diff, color=colors, alpha=0.8,
edgecolor='white', linewidth=1)
# Add actual value labels
for i, (driver, metric) in enumerate(zip(drivers_list, metrics_actual)):
ax.text(metrics_diff[i] + 0.02, i, f'{metric:.2f}',
va='center', fontsize=10, fontweight='bold')
# Styling
ax.set_xlabel('Downforce Level (relative difference)', fontsize=12, fontweight='bold')
ax.set_ylabel('Driver', fontsize=12, fontweight='bold')
ax.set_title('Monaco GP Qualifying - Downforce Levels',
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()