refinement
This commit is contained in:
60
figure1.py
60
figure1.py
@@ -320,3 +320,63 @@ plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
##
|
||||
|
||||
# %% Patientjourney Bubble chart
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
import matplotlib as mpl
|
||||
|
||||
mpl.rcParams["font.family"] = "DejaVu Sans" # or "Arial", "Calibri", "Times New Roman", ...
|
||||
mpl.rcParams["font.size"] = 12 # default size for text
|
||||
mpl.rcParams["axes.titlesize"] = 14
|
||||
mpl.rcParams["axes.titleweight"] = "bold"
|
||||
|
||||
|
||||
# Data (your counts)
|
||||
visits = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
|
||||
patient_count = np.array([32, 24, 28, 17, 13, 6, 3, 3, 2])
|
||||
|
||||
# "Remaining" = patients with >= that many visits (cumulative from the right)
|
||||
remaining = np.array([patient_count[i:].sum() for i in range(len(patient_count))])
|
||||
|
||||
# --- Plot ---
|
||||
fig, ax = plt.subplots(figsize=(12, 3))
|
||||
|
||||
y = 0.0 # all bubbles on one horizontal line
|
||||
|
||||
# Horizontal line
|
||||
ax.hlines(y, visits.min() - 0.4, visits.max() + 0.4, color="#1f77b4", linewidth=3)
|
||||
|
||||
# Bubble sizes (scale as needed)
|
||||
# (Matplotlib scatter uses area in points^2)
|
||||
sizes = patient_count * 35 # tweak this multiplier if you want bigger/smaller bubbles
|
||||
|
||||
ax.scatter(visits, np.full_like(visits, y), s=sizes, color="#1f77b4", zorder=3)
|
||||
|
||||
# Title
|
||||
#ax.set_title("Patient Journey by Visit Count", fontsize=14, pad=18)
|
||||
|
||||
# Top labels: "1 visits", "2 visits", ...
|
||||
for x in visits:
|
||||
label = f"{x} visit" if x == 1 else f"{x} visits"
|
||||
ax.text(x, y + 0.18, label, ha="center", va="bottom", fontsize=10)
|
||||
|
||||
# Bottom labels: "X patients" and "Y remaining"
|
||||
for x, pc, rem in zip(visits, patient_count, remaining):
|
||||
ax.text(x, y - 0.20, f"{pc} patients", ha="center", va="top", fontsize=9)
|
||||
ax.text(x, y - 0.32, f"{rem} remaining", ha="center", va="top", fontsize=9)
|
||||
|
||||
# Cosmetics: remove axes, keep spacing nice
|
||||
ax.set_xlim(visits.min() - 0.6, visits.max() + 0.6)
|
||||
ax.set_ylim(-0.5, 0.35)
|
||||
ax.set_xticks([])
|
||||
ax.set_yticks([])
|
||||
for spine in ax.spines.values():
|
||||
spine.set_visible(False)
|
||||
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
plt.savefig("patient_journey.svg", format="svg", bbox_inches="tight")
|
||||
##
|
||||
|
||||
|
||||
Reference in New Issue
Block a user