Bubble Chart
AAA Games Performance Bubble
Video games analyzed by critic score, player engagement, and sales with neon aesthetics.
Output
Python
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
fig, ax = plt.subplots(figsize=(14, 9), facecolor='#0a0a0f')
ax.set_facecolor('#0a0a0f')
games = ['Elden Ring', 'Zelda TotK', 'BG3', 'Spider-Man 2', 'FF16', 'Starfield', 'RE4 Remake', 'Diablo IV']
critic_score = np.array([96, 96, 96, 90, 87, 83, 93, 86])
players = np.array([23, 19, 15, 11, 8, 12, 7, 10])
sales = np.array([23, 20, 10, 11, 5, 12, 7, 10])
colors = ['#F5B027', '#6CF527', '#F5276C', '#F54927', '#27D3F5', '#4927F5', '#27F5B0', '#F527B0']
sizes = sales * 80
for glow_mult, glow_alpha in [(3.5, 0.02), (2.8, 0.04), (2.2, 0.06), (1.7, 0.10), (1.3, 0.15)]:
ax.scatter(critic_score, players, s=sizes*glow_mult, c=colors, alpha=glow_alpha, edgecolors='none')
ax.scatter(critic_score, players, s=sizes, c=colors, alpha=0.9, edgecolors='none')
ax.scatter(critic_score, players, s=sizes*0.4, c=colors, alpha=0.4, edgecolors='none')
ax.scatter(critic_score - np.sqrt(sizes)*0.02, players + np.sqrt(sizes)*0.02, s=sizes*0.15, c='white', alpha=0.5, edgecolors='none')
for i, game in enumerate(games):
offset_y = np.sqrt(sizes[i])/2 + 10
ax.annotate(game, (critic_score[i], players[i]), fontsize=10, color='white',
ha='center', va='bottom', xytext=(0, offset_y), textcoords='offset points', fontweight='bold')
ax.text(0.0, 1.08, 'AAA Games Performance', transform=ax.transAxes, fontsize=24, color='white', fontweight='bold')
ax.text(0.0, 1.02, 'Critic Score vs Players · Bubble size = Sales', transform=ax.transAxes, fontsize=11, color='#555555')
ax.set_xlabel('Metacritic Score', fontsize=14, color='#888888', fontweight='500', labelpad=15)
ax.set_ylabel('Active Players (Millions)', fontsize=14, color='#888888', fontweight='500', labelpad=15)
ax.tick_params(colors='#555555', labelsize=11, length=0)
ax.set_xlim(80, 100)
for y in [5, 10, 15, 20, 25]:
ax.axhline(y=y, color='#1a1a2e', linewidth=0.8, zorder=0)
for spine in ax.spines.values():
spine.set_visible(False)
plt.tight_layout()
plt.show()
Library
Matplotlib
Category
Pairwise Data
More Bubble Chart examples
☕