Ridgeline Plot

GPU Temperature Under Load

Thermal distributions with heat-inspired gradient fills

Output
GPU Temperature Under Load
Python
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
from matplotlib.colors import LinearSegmentedColormap

np.random.seed(456)

gpus = ['RTX 4090', 'RTX 4080', 'RX 7900', 'RTX 3080', 'RX 6800', 'RTX 3060']
# Heat gradient - blue to red
heat_colors = ['#276CF5', '#27D3F5', '#6CF527', '#F5D327', '#F54927', '#F5276C']

data = {
    'RTX 4090': np.random.normal(78, 5, 500),
    'RTX 4080': np.random.normal(72, 6, 500),
    'RX 7900': np.random.normal(85, 7, 500),
    'RTX 3080': np.random.normal(76, 6, 500),
    'RX 6800': np.random.normal(74, 5, 500),
    'RTX 3060': np.random.normal(68, 5, 500)
}

fig, ax = plt.subplots(figsize=(12, 8), facecolor='#0a0a0f')
ax.set_facecolor('#0a0a0f')

overlap = 1.6
x_range = np.linspace(45, 100, 300)

for i, (gpu, temps) in enumerate(data.items()):
    kde = stats.gaussian_kde(temps, bw_method=0.3)
    y = kde(x_range) * 3.5
    baseline = i * overlap
    
    # Create vertical gradient effect
    for j in range(50):
        alpha = 0.6 * (1 - j/50)
        y_level = baseline + y * (j/50)
        ax.fill_between(x_range, baseline, y_level, alpha=alpha * 0.03, color=heat_colors[i])
    
    # Glow effect
    ax.plot(x_range, y + baseline, color=heat_colors[i], linewidth=5, alpha=0.3)
    ax.plot(x_range, y + baseline, color=heat_colors[i], linewidth=2.5, alpha=0.6)
    ax.fill_between(x_range, baseline, y + baseline, alpha=0.5, color=heat_colors[i])
    ax.plot(x_range, y + baseline, color='white', linewidth=1, alpha=0.8)
    
    ax.text(43, baseline + 0.12, gpu, fontsize=10, color=heat_colors[i],
            ha='right', va='bottom', fontweight='600')

ax.set_xlim(30, 100)
ax.set_ylim(-0.3, len(gpus) * overlap + 1.8)
ax.set_xlabel('Temperature (°C)', fontsize=12, color='#666666', fontweight='500')
ax.set_title('GPU Temperature Under Load', fontsize=16, color='white', fontweight='bold', pad=20)

ax.tick_params(axis='x', colors='#555555', labelsize=10)
ax.tick_params(axis='y', left=False, labelleft=False)
for spine in ax.spines.values():
    spine.set_visible(False)

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Statistical

Did this help you?

Support PyLucid to keep it free & growing

Support