Skip to main content
Acceleration maps show the g-forces experienced by the car around the circuit. This includes longitudinal acceleration (braking and acceleration) and lateral acceleration (cornering forces). Track acceleration map showing g-forces

Understanding acceleration data

  • Longitudinal acceleration: Forward/backward forces during acceleration and braking
  • Lateral acceleration: Sideways forces during cornering
  • Measured in g-forces (1g = 9.81 m/s²)

Loading the session

import tif1
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import numpy as np

# Load session
session = tif1.get_session(2023, 'Suzuka', 'Q')
fastest_lap = session.laps.pick_fastest()

Calculating longitudinal acceleration

Longitudinal acceleration is derived from speed changes over time.
# Get telemetry
telemetry = fastest_lap.get_car_data()

# Calculate acceleration from speed
speed_ms = telemetry['Speed'] / 3.6  # Convert km/h to m/s
time_s = telemetry['Time'].dt.total_seconds()

# Compute derivative (acceleration)
lon_acc = np.gradient(speed_ms, time_s) / 9.81  # Convert to g-forces

# Extract position
x = telemetry['X']
y = telemetry['Y']

Creating the acceleration map

# Prepare segments
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

# Create plot
fig, ax = plt.subplots(figsize=(12, 10))

# Color-coded by acceleration
norm = plt.Normalize(lon_acc.min(), lon_acc.max())
lc = LineCollection(segments, cmap='RdBu_r', norm=norm, linewidth=4)
lc.set_array(lon_acc)
line = ax.add_collection(lc)

# Colorbar
cbar = plt.colorbar(line, ax=ax, label='Longitudinal Acceleration (g)')

# Format
ax.set_aspect('equal')
ax.axis('off')
plt.suptitle(f"{session.event['EventName']} {session.event.year} - Acceleration Map")
plt.tight_layout()
plt.show()

Complete example

import tif1
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import numpy as np

# Load session
session = tif1.get_session(2023, 'Suzuka', 'Q')
fastest_lap = session.laps.pick_fastest()

# Get telemetry
telemetry = fastest_lap.get_car_data()

# Calculate acceleration
speed_ms = telemetry['Speed'] / 3.6
time_s = telemetry['Time'].dt.total_seconds()
lon_acc = np.gradient(speed_ms, time_s) / 9.81

# Extract position
x = telemetry['X']
y = telemetry['Y']

# Prepare segments
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

# Create plot
fig, ax = plt.subplots(figsize=(12, 10))

# Color-coded track
norm = plt.Normalize(lon_acc.min(), lon_acc.max())
lc = LineCollection(segments, cmap='RdBu_r', norm=norm, linewidth=4)
lc.set_array(lon_acc)
line = ax.add_collection(lc)

# Colorbar
cbar = plt.colorbar(line, ax=ax, label='Longitudinal Acceleration (g)')

# Format
ax.set_aspect('equal')
ax.axis('off')
plt.suptitle(f"{session.event['EventName']} {session.event.year} - Acceleration Map")
plt.tight_layout()
plt.show()

Interpreting the colors

  • Red: Positive acceleration (accelerating)
  • Blue: Negative acceleration (braking)
  • White/neutral: Constant speed
  • Intensity: Magnitude of g-forces
Modern F1 cars can achieve:
  • Up to 5g under braking
  • Up to 2g during acceleration
  • Up to 6g in high-speed corners (lateral)

Lateral acceleration

For cornering forces, calculate lateral acceleration from speed and track curvature:
# Calculate track curvature from X, Y coordinates
dx = np.gradient(telemetry['X'])
dy = np.gradient(telemetry['Y'])
ddx = np.gradient(dx)
ddy = np.gradient(dy)

# Curvature formula
curvature = np.abs(dx * ddy - dy * ddx) / (dx**2 + dy**2)**1.5

# Lateral acceleration
lat_acc = (speed_ms**2 * curvature) / 9.81

Next steps

Last modified on March 6, 2026