fig, ax = plt.subplots(figsize=(9, 3.5))
ax.axis('off')
boxes = [
(0.12, 0.55, 'Externes Potential\n$v(\\mathbf{r})$\n(Kernladungen, Positionen)',
'#4393c3', 'white', 0.18, 0.28),
(0.45, 0.55, 'Wellenfunktion\n$\\psi(\\mathbf{r}_1,\\ldots,\\mathbf{r}_{N_e})$\n$3N_e$ Koordinaten',
'#d6604d', 'white', 0.16, 0.28),
(0.78, 0.55, 'Elektronendichte\n$\\rho_0(\\mathbf{r})$\n3 Koordinaten',
'#4dac26', 'white', 0.16, 0.28),
]
for x, y, txt, col, tc, w, h in boxes:
ax.text(x, y, txt, ha='center', va='center', fontsize=10,
color=tc, fontweight='bold',
bbox=dict(boxstyle='round,pad=0.5', facecolor=col,
edgecolor='gray', lw=1.2, alpha=0.9),
transform=ax.transAxes)
# Pfeile
for x1, x2, lbl, col in [
(0.22, 0.36, 'Schrödinger-Gl.\n(eindeutig)', '#555'),
(0.54, 0.69, 'HK1: eindeutig\n(Beweis durch Widerspruch)', '#2166ac'),
(0.69, 0.54, 'HK2: Variation\n$E[\\rho\']\geq E_0$', '#2166ac'),
]:
ax.annotate('', xy=(x2, 0.55), xytext=(x1, 0.55),
xycoords='axes fraction', textcoords='axes fraction',
arrowprops=dict(arrowstyle='->', color=col, lw=2.0))
mx = (x1+x2)/2
dy = 0.15 if '→' not in lbl else 0.15
ax.text(mx, 0.55 + (0.22 if 'HK1' in lbl else -0.22),
lbl, ha='center', va='center', fontsize=8.5,
color=col, transform=ax.transAxes)
ax.text(0.45, 0.08,
'HF-Welt: minimiere $E$ über Wellenfunktionen | DFT-Welt: minimiere $E[\\rho]$ über Dichten',
ha='center', va='center', fontsize=10, color='#444',
style='italic', transform=ax.transAxes)
ax.set_xlim(0, 1); ax.set_ylim(0, 1)
plt.tight_layout()
plt.show()