Guided analysis
Kaplan–Meier survival curves
Time-to-event data in, a publication-ready survival figure out: curves per group with pointwise confidence bands, a number-at-risk table beneath, median survival, and a log-rank test. R's survival and ggplot2 packages do the work, inside your browser tab.
Estimate survival over time
Kaplan–Meier analysis estimates how the probability of remaining alive—or remaining free of a defined event—changes over follow-up. It can include participants whose complete event time is unknown because they were still event-free when follow-up ended; these observations are censored.
Each downward step marks an observed event. Censor marks show where follow-up ended without the event. Confidence bands show uncertainty, and the risk table shows how many participants still support each part of the curve.
Is Kaplan–Meier appropriate?
Use this workflow when each row represents one independent participant, follow-up starts from a clearly defined time zero, and each participant has one exact time to either the event or ordinary right censoring. A group column is optional.
This pilot is not designed for competing events, delayed entry, interval censoring, repeated or recurrent events, multi-state outcomes, or multiple rows per participant. If censoring may be related to prognosis—or you are unsure which structure applies—seek statistical review before interpreting the curve.
What data do you need?
- Follow-up time: a non-negative numeric value for each participant.
- Event status: a value you can explicitly map to Event or Censored.
- Study group (optional): used to draw and compare separate curves.
- Participant ID (optional): used to detect duplicate participant rows.
You will also define the endpoint, time origin and unit, censoring rule, and analysis population. Column names alone cannot supply those meanings.
How should you read the result?
Read the curve together with its confidence bands and risk table. Estimates become less stable as fewer participants remain under observation, so avoid strong conclusions from the sparse tail.
Median survival is reported only when the estimated curve reaches 50%; otherwise it is not reached. The log-rank test assesses evidence of an overall difference between curves but does not measure its size. An optional hazard ratio compares instantaneous event rates under a proportional-hazards assumption—it is not a risk ratio, survival-time ratio, or proof of causation.
When should you seek statistical review?
Stop before interpreting this workflow if participants can experience a competing event, enter follow-up after time zero, contribute repeated events or records, or have censoring that may depend on prognosis. Seek review when curves cross substantially, the proportional-hazards check raises concern, estimates are unstable, or an observational comparison may be confounded.
The app can identify patterns and data limitations, but it cannot prove assumptions or make a causal conclusion.
Example output
The text Figura produced for this example, ready to paste into a methods section:
HR 0.64 (New treatment vs Standard care; 95% CI 0.37–1.11); log-rank p = 0.108. Median survival: Standard care 26.0 Months since randomization; New treatment not reached. Analyses were performed with Figura (Saha, 2026; https://figurastats.org), which runs R with the survival, ggplot2, and cowplot packages in the browser.
Sample data
Download sample.csv — 120 rows, columns participant_id, followup_months, status, group. A frozen synthetic dataset generated by a script in the repository's data-raw/ folder; nothing in it is a real patient.
How to cite
Journals ask for a software statement. The methods text Figura generates already ends with one; this is the same attribution in reference form.
Saha S. Figura: clinical manuscript figures and statistics in the browser. 2026. https://figurastats.org
@misc{figura2026,
author = {Saha, Sandeep},
title = {Figura: clinical manuscript figures and statistics in the browser},
year = {2026},
url = {https://figurastats.org},
note = {Accessed <date>}
}