Court Visualizations#

The TennisCourt class is the foundation of BsuTennis. It draws courts and overlays data with various orientations and themes.


Quick Start#

from BsuTennis import TennisCourt
import matplotlib.pyplot as plt

court = TennisCourt(theme='bsu', half=True)
fig, ax = plt.subplots(figsize=(6, 8))
court.draw(ax=ax)
plt.show()

Court Themes#

BSU

Hard

Clay

Grass

BSU

Hard

Clay

Grass

court = TennisCourt(theme='bsu')   # Default
court = TennisCourt(theme='hard')
court = TennisCourt(theme='clay')
court = TennisCourt(theme='grass')

Court Orientations#

Full Court

Half Court

Full Court

Half Court

# Full court
court = TennisCourt(half=False)

# Half court (recommended for analysis)
court = TennisCourt(half=True)

Scatter Plots#

Visualize shot landing points with customizable markers.

Scatter Plot

court.scatter(ax, x, y, color='#e74c3c', s=60, alpha=0.8)

Preset Styles#

Scatter Styles

court.scatter(ax, x, y, style='winner_fh')  # Red star
court.scatter(ax, x, y, style='ue')         # Error marker

Styles: winner_fh, winner_bh, forcing_fh, forcing_bh, ue, fe, ace


Arrow Trajectories#

Draw shot directions with customizable arrows.

Arrows

court.arrows(ax, x_start, y_start, x_end, y_end,
             color='#e74c3c',      
             linewidth=2,          
             arrow_style='fancy')  # fancy/simple/wedge/curve

Guide Lines & Zones#

Overlay tactical zones for serve analysis.

Vertical

Horizontal

Vertical

Horizontal

court.draw_guides(ax, service_vertical_lines=2, backcourt_line=True)

Multi-Court Grids#

Compare multiple players or scenarios side-by-side.

1×3 Grid

2×3 Grid

3×3 Grid

1x3

2x3

3x3

from BsuTennis import create_court_grid

fig, axes, courts = create_court_grid(nrows=2, ncols=3, half=True)
for ax, court in zip(axes.flat, courts):
    court.draw(ax=ax)

Text Annotations#

Add labels directly on the court.

court.annotate(ax, x=0, y=5, text='Service Box', fontsize=12, color='white')