From a3652aa849cbac685c4264fe424471ca2f0b33ab Mon Sep 17 00:00:00 2001 From: Carl Buchholz <32228189+aGuyLearning@users.noreply.github.com> Date: Tue, 21 Jan 2025 14:25:11 +0100 Subject: [PATCH] Fix typo in display_table parameter and add tests for Kaplan-Meier plots --- ehrapy/plot/_survival_analysis.py | 6 +- .../kaplain_meier_create_expected_plots.ipynb | 118 ++++++++++++++++++ tests/plot/_images/kaplan_meier_expected.png | Bin 0 -> 10332 bytes .../_images/kaplan_meier_table_expected.png | Bin 0 -> 19266 bytes tests/plot/test_survival_analysis.py | 44 +++++++ 5 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 tests/_scripts/kaplain_meier_create_expected_plots.ipynb create mode 100644 tests/plot/_images/kaplan_meier_expected.png create mode 100644 tests/plot/_images/kaplan_meier_table_expected.png diff --git a/ehrapy/plot/_survival_analysis.py b/ehrapy/plot/_survival_analysis.py index 948523fc..e3d2ae6b 100644 --- a/ehrapy/plot/_survival_analysis.py +++ b/ehrapy/plot/_survival_analysis.py @@ -186,7 +186,7 @@ def kmf( def kaplan_meier( kmfs: Sequence[KaplanMeierFitter], *, - diplay_table: bool = False, + display_table: bool = False, ci_alpha: list[float] | None = None, ci_force_lines: list[Boolean] | None = None, ci_show: list[Boolean] | None = None, @@ -208,7 +208,7 @@ def kaplan_meier( Args: kmfs: Iterables of fitted KaplanMeierFitter objects. - diplay_table: Display the survival probabilities in a table, below the plot. + display_table: Display the survival probabilities in a table, below the plot. ci_alpha: The transparency level of the confidence interval. If more than one kmfs, this should be a list. ci_force_lines: Force the confidence intervals to be line plots (versus default shaded areas). If more than one kmfs, this should be a list. @@ -302,7 +302,7 @@ def kaplan_meier( ax.set_title(title) # Prepare data for the table - if diplay_table: + if display_table: xticks = [x for x in ax.get_xticks() if x >= 0] xticks_space = xticks[1] - xticks[0] if xlabel is None: diff --git a/tests/_scripts/kaplain_meier_create_expected_plots.ipynb b/tests/_scripts/kaplain_meier_create_expected_plots.ipynb new file mode 100644 index 00000000..401bf639 --- /dev/null +++ b/tests/_scripts/kaplain_meier_create_expected_plots.ipynb @@ -0,0 +1,118 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "import ehrapy as ep\n", + "\n", + "current_notebook_dir = %pwd\n", + "_TEST_IMAGE_PATH = f\"{current_notebook_dir}/../plot/_images\"\n", + "mimic_2 = ep.dt.mimic_2(encoded=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "mimic_2[:, [\"censor_flg\"]].X = np.where(mimic_2[:, [\"censor_flg\"]].X == 0, 1, 0)\n", + "groups = mimic_2[:, [\"service_unit\"]].X\n", + "adata_ficu = mimic_2[groups == \"FICU\"]\n", + "adata_micu = mimic_2[groups == \"MICU\"]\n", + "kmf_1 = ep.tl.kaplan_meier(adata_ficu, duration_col=\"mort_day_censored\", event_col=\"censor_flg\", label=\"FICU\")\n", + "kmf_2 = ep.tl.kaplan_meier(adata_micu, duration_col=\"mort_day_censored\", event_col=\"censor_flg\", label=\"MICU\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = ep.pl.kaplan_meier(\n", + " [kmf_1, kmf_2],\n", + " ci_show=[False, False, False],\n", + " color=[\"k\", \"r\"],\n", + " xlim=[0, 750],\n", + " ylim=[0, 1],\n", + " xlabel=\"Days\",\n", + " ylabel=\"Proportion Survived\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "fig.savefig(f\"{_TEST_IMAGE_PATH}/kaplan_meier_expected.png\", dpi=80)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = ep.pl.kaplan_meier(\n", + " [kmf_1, kmf_2],\n", + " ci_show=[False, False, False],\n", + " color=[\"k\", \"r\"],\n", + " xlim=[0, 750],\n", + " ylim=[0, 1],\n", + " xlabel=\"Days\",\n", + " ylabel=\"Proportion Survived\",\n", + " display_table=True,\n", + " grid=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "fig.savefig(f\"{_TEST_IMAGE_PATH}/kaplan_meier_table_expected.png\", dpi=80)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.10" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tests/plot/_images/kaplan_meier_expected.png b/tests/plot/_images/kaplan_meier_expected.png new file mode 100644 index 0000000000000000000000000000000000000000..cee1a8d01f9cb5f2fd0972445972dc7913318a7a GIT binary patch literal 10332 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 EFDt`Hod5s; literal 0 HcmV?d00001 diff --git a/tests/plot/_images/kaplan_meier_table_expected.png b/tests/plot/_images/kaplan_meier_table_expected.png new file mode 100644 index 0000000000000000000000000000000000000000..f14c58ac917ad7cc578255aab81cea64ff107a8d GIT binary patch literal 19266 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