Heatmap

Multi-class Confusion Matrix

Classification results with precision annotations

Output
Multi-class Confusion Matrix
Python
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib.colors import LinearSegmentedColormap

np.random.seed(42)

# Simulated confusion matrix
classes = ['Cat', 'Dog', 'Bird', 'Fish', 'Horse']
n_classes = len(classes)

# Create realistic confusion matrix
cm = np.zeros((n_classes, n_classes), dtype=int)
for i in range(n_classes):
    total = np.random.randint(80, 120)
    cm[i, i] = int(total * np.random.uniform(0.75, 0.95))  # True positives
    remaining = total - cm[i, i]
    for j in range(n_classes):
        if i != j:
            cm[i, j] = np.random.randint(0, remaining // (n_classes - 1) + 1)

df = pd.DataFrame(cm, index=classes, columns=classes)

# NEON blue colormap
neon_blue = LinearSegmentedColormap.from_list('neon_blue', ['#ffffff', '#27D3F5', '#4927F5', '#5314E6'])

fig, ax = plt.subplots(figsize=(8, 6), facecolor='#ffffff')
ax.set_facecolor('#ffffff')

sns.heatmap(df, cmap=neon_blue, annot=True, fmt='d', linewidths=2, linecolor='#ffffff',
            annot_kws={'size': 14, 'fontweight': 'bold'},
            cbar_kws={'shrink': 0.8, 'label': 'Count'}, ax=ax)

ax.set_title('Multi-class Confusion Matrix', color='#1f2937', fontsize=14, fontweight='bold', pad=15)
ax.set_xlabel('Predicted Class', color='#1f2937', fontsize=11)
ax.set_ylabel('True Class', color='#1f2937', fontsize=11)
ax.tick_params(colors='#374151', labelsize=11)

# Add accuracy annotation
accuracy = np.trace(cm) / np.sum(cm)
ax.text(0.98, 0.02, f'Accuracy: {accuracy:.1%}', transform=ax.transAxes,
        ha='right', va='bottom', fontsize=12, fontweight='bold', color='#4927F5',
        bbox=dict(boxstyle='round', facecolor='#f3f4f6', edgecolor='#4927F5'))

plt.tight_layout()
plt.show()
Library

Matplotlib

Category

Heatmaps & Density

Did this help you?

Support PyLucid to keep it free & growing

Support