Source code for openalea.phenomenal.display.reconstruction_metrics

import numpy as np
import matplotlib.pyplot as plt


[docs] def plot_reconstruction_dashboard(times, metrics): methods = list(times.keys()) # Extract values precision = [metrics[m]['precision'] for m in methods] recall = [metrics[m]['recall'] for m in methods] iou = [metrics[m]['IoU'] for m in methods] dice = [metrics[m]['Dice'] for m in methods] t = [times[m] for m in methods] # Create figure fig, axes = plt.subplots(1, 3, figsize=(18, 5)) # ------------------------- # 1. Precision–Recall scatter # ------------------------- ax = axes[2] for i, m in enumerate(methods): ax.scatter(recall[i], precision[i]) ax.text(recall[i] + 0.002, precision[i], m) ax.set_xlabel("Recall") ax.set_ylabel("Precision") ax.set_title("Precision–Recall") ax.set_xlim(0, 1.05) ax.set_ylim(0, 1.05) ax.grid(True) # ------------------------- # 2. IoU / Dice bar plot # ------------------------- ax = axes[1] x = np.arange(len(methods)) width = 0.35 ax.bar(x - width/2, iou, width, label="IoU") ax.bar(x + width/2, dice, width, label="Dice") ax.set_xticks(x) ax.set_xticklabels(methods, rotation=20) ax.set_ylim(0, 1) ax.set_title("Quality (IoU / Dice)") ax.legend() # ------------------------- # 3. Time vs IoU (trade-off) # ------------------------- ax = axes[0] for i, m in enumerate(methods): ax.scatter(t[i], iou[i]) ax.text(t[i], iou[i], m) ax.set_xlabel("Time (s)") ax.set_ylabel("IoU") ax.set_xscale("log") # important due to large variation ax.set_title("Speed vs Quality") ax.grid(True) plt.tight_layout() plt.show()