QuaPy/examples/19.visualizing_simplex.py

69 lines
1.9 KiB
Python

import numpy as np
import quapy as qp
from quapy.method.confidence import ConfidenceIntervals
"""
A minimal example showing how to visualise ternary prevalences on the simplex.
The plot combines a cloud of posterior triplets, a few reference prevalences, a
confidence ellipse induced by the cloud, and a smooth density centred around the
true prevalence.
"""
rng = np.random.default_rng(0)
true_prev = np.array([0.20, 0.35, 0.45])
train_prev = np.array([0.50, 0.30, 0.20])
pred_prev = np.array([0.18, 0.39, 0.43])
posterior_cloud = rng.dirichlet(alpha=45 * true_prev, size=250)
point_layers = [
{
'points': posterior_cloud,
'label': 'posterior cloud',
'style': {'s': 12, 'alpha': 0.25, 'color': 'steelblue', 'edgecolors': 'none'},
},
{
'points': true_prev,
'label': 'true prevalence',
'style': {'s': 70, 'color': 'black'},
},
{
'points': pred_prev,
'label': 'predicted prevalence',
'style': {'s': 70, 'color': 'crimson'},
},
{
'points': train_prev,
'label': 'training prevalence',
'style': {'s': 70, 'color': 'darkorange'},
},
]
confidence_region = ConfidenceIntervals(posterior_cloud, confidence_level=0.95, bonferroni_correction=True)
region_layers = [
{
'fn': lambda p: float(p in confidence_region),
'label': '95% confidence intervals',
'color': 'seagreen',
'alpha': 0.15,
}
]
density = lambda p: np.exp(-45 * np.sum((p - true_prev) ** 2, axis=1))
qp.plot.plot_simplex(
point_layers=point_layers,
region_layers=region_layers,
density_function=density,
density_color='royalblue',
class_names=['class A', 'class B', 'class C'],
title='Ternary prevalence visualisation',
legend_ncol=3,
figsize=(7.2, 5.8),
class_name_fontsize=9,
title_fontsize=10,
legend_fontsize=8,
savepath='./plots/simplex_visualization.png',
)