From 040e39dbe2deb251c2323ba2e2c7de23e7f7b7eb Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Sep 2025 16:44:44 +0200 Subject: [PATCH 01/11] :art: format notebooks - except line plot example data --- docs/api_examples/bar_plot.ipynb | 66 ++++++++++++++++++++----------- docs/api_examples/box_plot.ipynb | 16 ++++---- docs/api_examples/line_plot.ipynb | 17 +++++--- 3 files changed, 62 insertions(+), 37 deletions(-) diff --git a/docs/api_examples/bar_plot.ipynb b/docs/api_examples/bar_plot.ipynb index ea40d66..062d37c 100644 --- a/docs/api_examples/bar_plot.ipynb +++ b/docs/api_examples/bar_plot.ipynb @@ -229,11 +229,22 @@ "# Sample types and bacterial genera\n", "sample_types = [\"Soil\", \"Freshwater\", \"Ocean\", \"Sediment\", \"Wastewater\"]\n", "genera = [\n", - " \"Pseudomonas\", \"Bacillus\", \"Escherichia\", \"Streptococcus\",\n", - " \"Lactobacillus\", \"Bacteroides\", \"Clostridium\", \"Staphylococcus\",\n", - " \"Enterobacter\", \"Klebsiella\", \"Salmonella\", \"Shigella\", \"Vibrio\"\n", + " \"Pseudomonas\",\n", + " \"Bacillus\",\n", + " \"Escherichia\",\n", + " \"Streptococcus\",\n", + " \"Lactobacillus\",\n", + " \"Bacteroides\",\n", + " \"Clostridium\",\n", + " \"Staphylococcus\",\n", + " \"Enterobacter\",\n", + " \"Klebsiella\",\n", + " \"Salmonella\",\n", + " \"Shigella\",\n", + " \"Vibrio\",\n", "]\n", "\n", + "\n", "def make_sample(sample: str, genera: list[str]) -> list[dict]:\n", " \"\"\"\n", " Generate synthetic microbial abundance data for a single sample.\n", @@ -252,26 +263,31 @@ " Relative abundance, and Genera count.\n", " \"\"\"\n", " # Randomly pick a subset of genera present in this sample\n", - " selected = np.random.choice(genera, np.random.randint(5, len(genera) + 1), replace=False)\n", - " \n", + " selected = np.random.choice(\n", + " genera, np.random.randint(5, len(genera) + 1), replace=False\n", + " )\n", + "\n", " # Generate random raw abundances (shifted by +0.1 to avoid zeros)\n", " raw = np.random.rand(len(selected)) + 0.1\n", - " \n", + "\n", " # Normalize abundances so they sum to exactly 100%\n", " abundances = (raw / raw.sum()) * 100\n", - " \n", + "\n", " # Count how many genera are present\n", " genera_count = len(selected)\n", - " \n", + "\n", " # Store results into list of dicts\n", " return [\n", - " {\"Sample\": sample,\n", - " \"Genus\": genus,\n", - " \"Relative_Abundance\": abund,\n", - " \"Genera_Count\": genera_count}\n", + " {\n", + " \"Sample\": sample,\n", + " \"Genus\": genus,\n", + " \"Relative_Abundance\": abund,\n", + " \"Genera_Count\": genera_count,\n", + " }\n", " for genus, abund in zip(selected, abundances)\n", " ]\n", "\n", + "\n", "# Generate full dataset by combining all samples\n", "abund_df = pd.DataFrame(\n", " [row for sample in sample_types for row in make_sample(sample, genera)]\n", @@ -4229,7 +4245,9 @@ ], "source": [ "# Create a df with unique samples and their genera counts\n", - "bar_plot_basic_df = abund_df.drop_duplicates(subset=\"Sample\")[[\"Sample\", \"Genera_Count\"]]\n", + "bar_plot_basic_df = abund_df.drop_duplicates(subset=\"Sample\")[\n", + " [\"Sample\", \"Genera_Count\"]\n", + "]\n", "\n", "# Define output path for the basic png plot\n", "file_path_basic_png = Path(output_dir) / \"bar_plot_basic.png\"\n", @@ -4240,7 +4258,7 @@ " x=\"Sample\",\n", " y=\"Genera_Count\",\n", " title=\"Genera Count by Sample Type\",\n", - " file_path=file_path_basic_png, \n", + " file_path=file_path_basic_png,\n", ")\n", "\n", "bar_plot_basic.show()" @@ -4308,21 +4326,21 @@ "\n", "# Generate the advanced stacked bar plot\n", "bar_plot_adv = create_bar_plot(\n", - " data=abund_df, \n", - " x=\"Sample\", \n", - " y=\"Relative_Abundance\", \n", - " color=\"Genus\", \n", - " barmode=\"stack\", \n", + " data=abund_df,\n", + " x=\"Sample\",\n", + " y=\"Relative_Abundance\",\n", + " color=\"Genus\",\n", + " barmode=\"stack\",\n", " title=\"Taxonomic Profile of Environmental Samples\",\n", " subtitle=\"Relative Abundance of Bacterial Genera\",\n", - " labels={ \n", + " labels={\n", " \"Sample\": \"Environmental Sample Type\",\n", " \"Relative_Abundance\": \"Relative Abundance (%)\",\n", - " \"Genus\": \"Genus\"\n", + " \"Genus\": \"Genus\",\n", " },\n", - " hover_name=\"Genus\", \n", - " hover_data=[\"Relative_Abundance\"], \n", - " opacity=0.9, \n", + " hover_name=\"Genus\",\n", + " hover_data=[\"Relative_Abundance\"],\n", + " opacity=0.9,\n", " file_path=file_path_adv_html,\n", ")\n", "\n", diff --git a/docs/api_examples/box_plot.ipynb b/docs/api_examples/box_plot.ipynb index 00dcb25..116f5cf 100644 --- a/docs/api_examples/box_plot.ipynb +++ b/docs/api_examples/box_plot.ipynb @@ -162,7 +162,7 @@ "treatment_effect = np.where(\n", " treatment_assignments == \"Treated\",\n", " np.random.normal(loc=50, scale=30, size=num_samples),\n", - " 0\n", + " 0,\n", ")\n", "\n", "# Small random per-gene offset for extra variability\n", @@ -172,12 +172,14 @@ "expr = base_expr + treatment_effect + gene_offset\n", "\n", "# Construct DataFrame\n", - "gene_exp_df = pd.DataFrame({\n", - " \"Sample_ID\": sample_ids,\n", - " \"Treatment\": treatment_assignments,\n", - " \"Gene_ID\": gene_ids,\n", - " \"Expression\": expr\n", - "})" + "gene_exp_df = pd.DataFrame(\n", + " {\n", + " \"Sample_ID\": sample_ids,\n", + " \"Treatment\": treatment_assignments,\n", + " \"Gene_ID\": gene_ids,\n", + " \"Expression\": expr,\n", + " }\n", + ")" ] }, { diff --git a/docs/api_examples/line_plot.ipynb b/docs/api_examples/line_plot.ipynb index 91fd1fc..c70120e 100644 --- a/docs/api_examples/line_plot.ipynb +++ b/docs/api_examples/line_plot.ipynb @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "ac2db647", "metadata": {}, "outputs": [ @@ -4446,12 +4446,17 @@ " data=sample_df,\n", " x=\"day\",\n", " y=\"value\",\n", - " color=\"experiment\", \n", - " line_dash=\"condition\", \n", - " error_y=\"value_error\", \n", + " color=\"experiment\",\n", + " line_dash=\"condition\",\n", + " error_y=\"value_error\",\n", " title=\"Experiment & Condition Trends\",\n", - " subtitle = \"Measurements over 5 days for two experiments (A, B) under Control and Treatment conditions.\",\n", - " labels={\"day\": \"Day\", \"value\": \"Response\", \"condition\": \"Condition\", \"experiment\": \"Experiment\"},\n", + " subtitle=\"Measurements over 5 days for two experiments (A, B) under Control and Treatment conditions.\",\n", + " labels={\n", + " \"day\": \"Day\",\n", + " \"value\": \"Response\",\n", + " \"condition\": \"Condition\",\n", + " \"experiment\": \"Experiment\",\n", + " },\n", " color_discrete_map={\"A\": \"#508AA8\", \"B\": \"#A8505E\"},\n", " line_dash_map={\"Control\": \"solid\", \"Treatment\": \"dot\"},\n", " markers=True,\n", From 2fa7c771cf95444ee7f06a72fa032268de66782b Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Sep 2025 16:46:01 +0200 Subject: [PATCH 02/11] :art: remove html_js_files entry needed for plotly6 --- docs/conf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 580e40c..8d60193 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -57,9 +57,8 @@ # Plolty support through require javascript library # https://myst-nb.readthedocs.io/en/latest/render/interactive.html#plotly -html_js_files = [ - # "https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.7/require.min.js" -] +# html_js_files = [ +# ] # https://myst-nb.readthedocs.io/en/latest/configuration.html # Execution From 88ca84c3fd1173dedb87903a51f1b84144259b0f Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Tue, 16 Sep 2025 10:17:19 +0200 Subject: [PATCH 03/11] =?UTF-8?q?=E2=8F=AA=20format=20data=20as=20before,?= =?UTF-8?q?=20but=20hide=20input=20so=20it=20could=20be=20reformatted=20wi?= =?UTF-8?q?th=20black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/api_examples/line_plot.ipynb | 54 ++++++++--------- docs/api_examples/line_plot.py | 97 +++++++++++-------------------- 2 files changed, 62 insertions(+), 89 deletions(-) diff --git a/docs/api_examples/line_plot.ipynb b/docs/api_examples/line_plot.ipynb index c70120e..361e500 100644 --- a/docs/api_examples/line_plot.ipynb +++ b/docs/api_examples/line_plot.ipynb @@ -54,7 +54,9 @@ "source": [ "### 0.1. Installing libraries and creating global variables for platform and working directory\n", "\n", - "To run this notebook locally, you should create a virtual environment with the required libraries. If you are running this notebook on Google Colab, everything should be set." + "To run this notebook locally, you should create a virtual environment\n", + "with the required libraries. If you are running this notebook on Google\n", + "Colab, everything should be set." ] }, { @@ -254,21 +256,8 @@ "outputs": [], "source": [ "import os\n", + "IN_COLAB = \"COLAB_GPU\" in os.environ\n", "\n", - "IN_COLAB = \"COLAB_GPU\" in os.environ" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "ee2ffd40", - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ "# Create a directory for outputs\n", "output_dir = \"./outputs\"\n", "os.makedirs(output_dir, exist_ok=True)" @@ -289,10 +278,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Imports\n", - "import pandas as pd\n", "from pathlib import Path\n", "\n", + "import pandas as pd\n", + "\n", "from vuecore.plots.basic.line import create_line_plot" ] }, @@ -302,14 +291,20 @@ "metadata": {}, "source": [ "### 0.3. Create sample data\n", - "We create a synthetic dataset showing measurements over five days for two experiments (A, B), each tested under Control and Treatment conditions, with associated measurement errors." + "We create a synthetic dataset showing measurements over five days for\n", + "two experiments (A, B), each tested under Control and Treatment\n", + "conditions, with associated measurement errors." ] }, { "cell_type": "code", "execution_count": null, "id": "ac2db647", - "metadata": {}, + "metadata": { + "tags": [ + "hide-input" + ] + }, "outputs": [ { "data": { @@ -401,12 +396,12 @@ "source": [ "sample_df = pd.DataFrame({\n", " \"day\": list(range(1, 6)) * 4, # 5 days\n", - " \"experiment\": [\"A\"] * 10 + [\"B\"] * 10, # 2 experiments\n", - " \"condition\": ([\"Control\"] * 5 + [\"Treatment\"] * 5) * 2, # 2 conditions\n", + " \"experiment\": [\"A\"] * 10 + [\"B\"] * 10, # 2 experiments\n", + " \"condition\": ([\"Control\"] * 5 + [\"Treatment\"] * 5) * 2, # 2 conditions\n", " \"value\": [\n", " 11, 13, 15, 17, 18, # A - Control\n", " 10, 12, 14, 15, 16, # A - Treatment\n", - " 19, 20, 21, 22, 23, # B - Control\n", + " 19, 20, 21, 22, 23, # B - Control\n", " 20, 22, 21, 23, 22, # B - Treatment\n", " ],\n", " \"value_error\": [1, 1.2, 0.9, 1.1, 1.0, 1.3, 1.0, 1.2, 1.4, 1.1,\n", @@ -422,7 +417,8 @@ "metadata": {}, "source": [ "## 1. Basic Line Plot\n", - "A basic line plot can be created by simply providing the `x`, `y`, and `color` columns from the DataFrame." + "A basic line plot can be created by simply providing the `x`, `y`, and\n", + "`color` columns from the DataFrame." ] }, { @@ -4387,7 +4383,9 @@ "metadata": {}, "source": [ "## 2. Advanced Line Plot\n", - "Here is an example of an advanced line plot with more descriptive parameters, including `error bars`, `line styles`, `markers`, and `custom colors`." + "Here is an example of an advanced line plot with more descriptive\n", + "parameters, including `error bars`, `line styles`, `markers`, and\n", + "`custom colors`." ] }, { @@ -4457,8 +4455,12 @@ " \"condition\": \"Condition\",\n", " \"experiment\": \"Experiment\",\n", " },\n", - " color_discrete_map={\"A\": \"#508AA8\", \"B\": \"#A8505E\"},\n", - " line_dash_map={\"Control\": \"solid\", \"Treatment\": \"dot\"},\n", + " color_discrete_map={\n", + " \"A\": \"#508AA8\",\n", + " \"B\": \"#A8505E\"},\n", + " line_dash_map={\n", + " \"Control\": \"solid\",\n", + " \"Treatment\": \"dot\"},\n", " markers=True,\n", " line_shape=\"spline\",\n", " file_path=file_path_adv_html,\n", diff --git a/docs/api_examples/line_plot.py b/docs/api_examples/line_plot.py index 44fe1d7..e62f9d9 100644 --- a/docs/api_examples/line_plot.py +++ b/docs/api_examples/line_plot.py @@ -52,7 +52,9 @@ # %% [markdown] # ### 0.1. Installing libraries and creating global variables for platform and working directory # -# To run this notebook locally, you should create a virtual environment with the required libraries. If you are running this notebook on Google Colab, everything should be set. +# To run this notebook locally, you should create a virtual environment +# with the required libraries. If you are running this notebook on Google +# Colab, everything should be set. # %% tags=["hide-output"] # VueCore library @@ -60,10 +62,8 @@ # %% tags=["hide-cell"] import os - IN_COLAB = "COLAB_GPU" in os.environ -# %% tags=["hide-cell"] # Create a directory for outputs output_dir = "./outputs" os.makedirs(output_dir, exist_ok=True) @@ -72,74 +72,39 @@ # ### 0.2. Importing libraries # %% -# Imports -import pandas as pd from pathlib import Path +import pandas as pd + from vuecore.plots.basic.line import create_line_plot # %% [markdown] # ### 0.3. Create sample data -# We create a synthetic dataset showing measurements over five days for two experiments (A, B), each tested under Control and Treatment conditions, with associated measurement errors. - -# %% -sample_df = pd.DataFrame( - { - "day": list(range(1, 6)) * 4, # 5 days - "experiment": ["A"] * 10 + ["B"] * 10, # 2 experiments - "condition": (["Control"] * 5 + ["Treatment"] * 5) * 2, # 2 conditions - "value": [ - 11, - 13, - 15, - 17, - 18, # A - Control - 10, - 12, - 14, - 15, - 16, # A - Treatment - 19, - 20, - 21, - 22, - 23, # B - Control - 20, - 22, - 21, - 23, - 22, # B - Treatment - ], - "value_error": [ - 1, - 1.2, - 0.9, - 1.1, - 1.0, - 1.3, - 1.0, - 1.2, - 1.4, - 1.1, - 2.0, - 1.8, - 2.1, - 1.5, - 2.3, - 1.7, - 2.0, - 1.8, - 2.1, - 2.2, - ], - } -) +# We create a synthetic dataset showing measurements over five days for +# two experiments (A, B), each tested under Control and Treatment +# conditions, with associated measurement errors. + +# %% tags=["hide-input"] +sample_df = pd.DataFrame({ + "day": list(range(1, 6)) * 4, # 5 days + "experiment": ["A"] * 10 + ["B"] * 10, # 2 experiments + "condition": (["Control"] * 5 + ["Treatment"] * 5) * 2, # 2 conditions + "value": [ + 11, 13, 15, 17, 18, # A - Control + 10, 12, 14, 15, 16, # A - Treatment + 19, 20, 21, 22, 23, # B - Control + 20, 22, 21, 23, 22, # B - Treatment + ], + "value_error": [1, 1.2, 0.9, 1.1, 1.0, 1.3, 1.0, 1.2, 1.4, 1.1, + 2.0, 1.8, 2.1, 1.5, 2.3, 1.7, 2.0, 1.8, 2.1, 2.2], +}) sample_df.head() # %% [markdown] # ## 1. Basic Line Plot -# A basic line plot can be created by simply providing the `x`, `y`, and `color` columns from the DataFrame. +# A basic line plot can be created by simply providing the `x`, `y`, and +# `color` columns from the DataFrame. # %% # Define output path for the basic png plot @@ -159,7 +124,9 @@ # %% [markdown] # ## 2. Advanced Line Plot -# Here is an example of an advanced line plot with more descriptive parameters, including `error bars`, `line styles`, `markers`, and `custom colors`. +# Here is an example of an advanced line plot with more descriptive +# parameters, including `error bars`, `line styles`, `markers`, and +# `custom colors`. # %% # Define output file path for the HTML plot @@ -181,8 +148,12 @@ "condition": "Condition", "experiment": "Experiment", }, - color_discrete_map={"A": "#508AA8", "B": "#A8505E"}, - line_dash_map={"Control": "solid", "Treatment": "dot"}, + color_discrete_map={ + "A": "#508AA8", + "B": "#A8505E"}, + line_dash_map={ + "Control": "solid", + "Treatment": "dot"}, markers=True, line_shape="spline", file_path=file_path_adv_html, From 2807a135e04bd41582f345557d689acf53c5a1c4 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:17:37 +0200 Subject: [PATCH 04/11] :art: unify imports, data view and link create function in docs --- docs/api_examples/bar_plot.ipynb | 4101 +----------------------- docs/api_examples/bar_plot.py | 13 +- docs/api_examples/box_plot.ipynb | 135 +- docs/api_examples/box_plot.py | 15 +- docs/api_examples/line_plot.ipynb | 4325 +------------------------- docs/api_examples/line_plot.py | 76 +- docs/api_examples/scatter_plot.ipynb | 4315 +------------------------ docs/api_examples/scatter_plot.py | 11 +- 8 files changed, 345 insertions(+), 12646 deletions(-) diff --git a/docs/api_examples/bar_plot.ipynb b/docs/api_examples/bar_plot.ipynb index 062d37c..bb068a0 100644 --- a/docs/api_examples/bar_plot.ipynb +++ b/docs/api_examples/bar_plot.ipynb @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "963a9529", "metadata": { "tags": [ @@ -84,20 +84,8 @@ "source": [ "import os\n", "\n", - "IN_COLAB = \"COLAB_GPU\" in os.environ" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "ee2ffd40", - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ + "IN_COLAB = \"COLAB_GPU\" in os.environ\n", + "\n", "# Create a directory for outputs\n", "output_dir = \"./outputs\"\n", "os.makedirs(output_dir, exist_ok=True)" @@ -118,11 +106,11 @@ "metadata": {}, "outputs": [], "source": [ - "# Imports\n", - "import pandas as pd\n", - "import numpy as np\n", "from pathlib import Path\n", "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", "from vuecore.plots.basic.bar import create_bar_plot" ] }, @@ -137,91 +125,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "ac2db647", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
SampleGenusRelative_AbundanceGenera_Count
0SoilKlebsiella4.14238411
1SoilShigella12.80730111
2SoilPseudomonas2.66778711
3SoilVibrio14.02017211
4SoilBacteroides17.71375811
\n", - "
" - ], - "text/plain": [ - " Sample Genus Relative_Abundance Genera_Count\n", - "0 Soil Klebsiella 4.142384 11\n", - "1 Soil Shigella 12.807301 11\n", - "2 Soil Pseudomonas 2.667787 11\n", - "3 Soil Vibrio 14.020172 11\n", - "4 Soil Bacteroides 17.713758 11" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], "source": [ "# Set a random seed for reproducibility of the synthetic data\n", "np.random.seed(42)\n", @@ -301,3948 +212,17 @@ "metadata": {}, "source": [ "## 1. Basic Bar Plot\n", - "A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`." + "A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, \n", + "along with style options like `title` \n", + "using [`create_bar_plot`](vuecore.plots.basic.bar.create_bar_plot)." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "d0d34455", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/bar_plot_basic.png\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Create a df with unique samples and their genera counts\n", "bar_plot_basic_df = abund_df.drop_duplicates(subset=\"Sample\")[\n", @@ -4275,51 +255,10 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "358e45fe", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/bar_plot_advanced.html\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define the output file path for the HTML plot\n", "file_path_adv_html = Path(output_dir) / \"bar_plot_advanced.html\"\n", diff --git a/docs/api_examples/bar_plot.py b/docs/api_examples/bar_plot.py index 0f91c42..7976808 100644 --- a/docs/api_examples/bar_plot.py +++ b/docs/api_examples/bar_plot.py @@ -62,7 +62,6 @@ IN_COLAB = "COLAB_GPU" in os.environ -# %% tags=["hide-cell"] # Create a directory for outputs output_dir = "./outputs" os.makedirs(output_dir, exist_ok=True) @@ -71,18 +70,18 @@ # ### 0.2. Importing libraries # %% -# Imports -import pandas as pd -import numpy as np from pathlib import Path +import numpy as np +import pandas as pd + from vuecore.plots.basic.bar import create_bar_plot # %% [markdown] # ### 0.3. Create sample data # We create a synthetic dataset representing the relative abundances of common bacterial genera across various environmental samples. -# %% +# %% tags=["hide-input"] # Set a random seed for reproducibility of the synthetic data np.random.seed(42) @@ -156,7 +155,9 @@ def make_sample(sample: str, genera: list[str]) -> list[dict]: # %% [markdown] # ## 1. Basic Bar Plot -# A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`. +# A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, +# along with style options like `title` +# using [`create_bar_plot`](vuecore.plots.basic.bar.create_bar_plot). # %% # Create a df with unique samples and their genera counts diff --git a/docs/api_examples/box_plot.ipynb b/docs/api_examples/box_plot.ipynb index 116f5cf..3878c3d 100644 --- a/docs/api_examples/box_plot.ipynb +++ b/docs/api_examples/box_plot.ipynb @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "963a9529", "metadata": { "tags": [ @@ -84,20 +84,8 @@ "source": [ "import os\n", "\n", - "IN_COLAB = \"COLAB_GPU\" in os.environ" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "ee2ffd40", - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ + "IN_COLAB = \"COLAB_GPU\" in os.environ\n", + "\n", "# Create a directory for outputs\n", "output_dir = \"./outputs\"\n", "os.makedirs(output_dir, exist_ok=True)" @@ -106,23 +94,25 @@ { "cell_type": "markdown", "id": "31638f9a", - "metadata": {}, + "metadata": { + "lines_to_next_cell": 0 + }, "source": [ "### 0.2. Importing libraries" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "06dbf6a2", "metadata": {}, "outputs": [], "source": [ - "# Imports\n", - "import pandas as pd\n", - "import numpy as np\n", "from pathlib import Path\n", "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", "from vuecore.plots.basic.box import create_box_plot" ] }, @@ -137,9 +127,13 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "ac2db647", - "metadata": {}, + "metadata": { + "tags": [ + "hide-input" + ] + }, "outputs": [], "source": [ "# Set a random seed for reproducibility of the synthetic data\n", @@ -179,7 +173,8 @@ " \"Gene_ID\": gene_ids,\n", " \"Expression\": expr,\n", " }\n", - ")" + ")\n", + "gene_exp_df" ] }, { @@ -188,56 +183,17 @@ "metadata": {}, "source": [ "## 1. Basic Box Plot\n", - "A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`." + "A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", + "along with style options like `title` \n", + "using [`create_box_plot`](vuecore.plots.basic.box.create_box_plot)." ] }, { "cell_type": "code", - "execution_count": 48, + "execution_count": null, "id": "d0d34455", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/box_plot_basic.png\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define output file path for the PNG plot\n", "file_path_basic_png = Path(output_dir) / \"box_plot_basic.png\"\n", @@ -265,51 +221,10 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "id": "358e45fe", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/box_plot_advanced.html\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define the output file path for the advanced HTML plot\n", "file_path_adv_html = Path(output_dir) / \"box_plot_advanced.html\"\n", diff --git a/docs/api_examples/box_plot.py b/docs/api_examples/box_plot.py index 6989b27..0b2808c 100644 --- a/docs/api_examples/box_plot.py +++ b/docs/api_examples/box_plot.py @@ -62,27 +62,25 @@ IN_COLAB = "COLAB_GPU" in os.environ -# %% tags=["hide-cell"] # Create a directory for outputs output_dir = "./outputs" os.makedirs(output_dir, exist_ok=True) # %% [markdown] # ### 0.2. Importing libraries - # %% -# Imports -import pandas as pd -import numpy as np from pathlib import Path +import numpy as np +import pandas as pd + from vuecore.plots.basic.box import create_box_plot # %% [markdown] # ### 0.3. Create sample data # We create a synthetic dataset simulating gene expression levels across different patient samples and treatment conditions, with each data point representing a unique gene's expression level under a specific treatment for a particular patient. -# %% +# %% tags=["hide-input"] # Set a random seed for reproducibility of the synthetic data np.random.seed(42) @@ -121,10 +119,13 @@ "Expression": expr, } ) +gene_exp_df # %% [markdown] # ## 1. Basic Box Plot -# A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`. +# A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame, +# along with style options like `title` +# using [`create_box_plot`](vuecore.plots.basic.box.create_box_plot). # %% # Define output file path for the PNG plot diff --git a/docs/api_examples/line_plot.ipynb b/docs/api_examples/line_plot.ipynb index 361e500..c8e1208 100644 --- a/docs/api_examples/line_plot.ipynb +++ b/docs/api_examples/line_plot.ipynb @@ -61,184 +61,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "36246ed6", "metadata": { "tags": [ "hide-output" ] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing /Users/asaru/Documents/DTU/MoNA/VueCore/vuecore\n", - " Installing build dependencies ... \u001b[?25ldone\n", - "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", - "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25hRequirement already satisfied: numpy in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.6)\n", - "Requirement already satisfied: pandas in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.3.0)\n", - "Requirement already satisfied: scipy in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.16.0)\n", - "Requirement already satisfied: plotly in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (6.1.2)\n", - "Requirement already satisfied: beautifulsoup4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (4.13.4)\n", - "Requirement already satisfied: requests in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.32.4)\n", - "Requirement already satisfied: dash in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.4)\n", - "Requirement already satisfied: networkx in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.5)\n", - "Requirement already satisfied: matplotlib in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.10.3)\n", - "Requirement already satisfied: kaleido in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.0)\n", - "Requirement already satisfied: pyvis in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.3.1)\n", - "Requirement already satisfied: wordcloud in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.9.4)\n", - "Requirement already satisfied: cyjupyter in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.0)\n", - "Requirement already satisfied: nltk in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.9.1)\n", - "Requirement already satisfied: webweb in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.0.37)\n", - "Requirement already satisfied: acore in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.1.3)\n", - "Requirement already satisfied: dash-cytoscape in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.2)\n", - "Requirement already satisfied: pydantic in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.11.7)\n", - "Collecting nbformat>=4.2.0 (from vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached nbformat-5.10.4-py3-none-any.whl.metadata (3.6 kB)\n", - "Collecting fastjsonschema>=2.15 (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached fastjsonschema-2.21.1-py3-none-any.whl.metadata (2.2 kB)\n", - "Collecting jsonschema>=2.6 (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached jsonschema-4.24.0-py3-none-any.whl.metadata (7.8 kB)\n", - "Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (5.8.1)\n", - "Requirement already satisfied: traitlets>=5.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (5.14.3)\n", - "Collecting attrs>=22.2.0 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", - "Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached jsonschema_specifications-2025.4.1-py3-none-any.whl.metadata (2.9 kB)\n", - "Collecting referencing>=0.28.4 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached referencing-0.36.2-py3-none-any.whl.metadata (2.8 kB)\n", - "Collecting rpds-py>=0.7.1 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached rpds_py-0.25.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (4.1 kB)\n", - "Requirement already satisfied: platformdirs>=2.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from jupyter-core!=5.0.*,>=4.12->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.3.8)\n", - "Requirement already satisfied: typing-extensions>=4.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from referencing>=0.28.4->jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.14.0)\n", - "Requirement already satisfied: dsp-pandas in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.0.5)\n", - "Requirement already satisfied: scikit-learn>=1.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.7.0)\n", - "Requirement already satisfied: biopython in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.85)\n", - "Requirement already satisfied: combat in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.3.3)\n", - "Requirement already satisfied: gseapy!=1.1.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.9)\n", - "Requirement already satisfied: kmapper in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.1.0)\n", - "Requirement already satisfied: lifelines in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.30.0)\n", - "Requirement already satisfied: pingouin in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.5)\n", - "Requirement already satisfied: python-louvain in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.16)\n", - "Requirement already satisfied: PyWGCNA!=2.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.1)\n", - "Requirement already satisfied: snfpy in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.2)\n", - "Requirement already satisfied: umap-learn in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.7)\n", - "Requirement already satisfied: statsmodels in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.14.4)\n", - "Requirement already satisfied: inmoose in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.7)\n", - "Requirement already satisfied: rarfile in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.2)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.58.4)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.4.8)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (25.0)\n", - "Requirement already satisfied: pillow>=8 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (11.2.1)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.2.3)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.9.0.post0)\n", - "Requirement already satisfied: six>=1.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.17.0)\n", - "Requirement already satisfied: seaborn>=0.11.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.13.2)\n", - "Requirement already satisfied: biomart>=0.9.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.9.2)\n", - "Requirement already satisfied: setuptools>=67.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (80.9.0)\n", - "Requirement already satisfied: reactome2py>=3.0.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.0)\n", - "Requirement already satisfied: anndata>=0.10.8 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.11.4)\n", - "Requirement already satisfied: rsrc>=0.1.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.1.3)\n", - "Requirement already satisfied: psutil>=5.9.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (7.0.0)\n", - "Requirement already satisfied: jinja2>=2.9.6 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.1.6)\n", - "Requirement already satisfied: ipython>=5.3.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (9.3.0)\n", - "Requirement already satisfied: jsonpickle>=1.4.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.1.1)\n", - "Requirement already satisfied: array-api-compat!=1.5,>1.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.12.0)\n", - "Requirement already satisfied: h5py>=3.7 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.14.0)\n", - "Requirement already satisfied: natsort in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.4.0)\n", - "Requirement already satisfied: decorator in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (5.2.1)\n", - "Requirement already satisfied: ipython-pygments-lexers in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.1)\n", - "Requirement already satisfied: jedi>=0.16 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.19.2)\n", - "Requirement already satisfied: matplotlib-inline in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.1.7)\n", - "Requirement already satisfied: pexpect>4.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.9.0)\n", - "Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.51)\n", - "Requirement already satisfied: pygments>=2.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.19.2)\n", - "Requirement already satisfied: stack_data in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.6.3)\n", - "Requirement already satisfied: wcwidth in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.13)\n", - "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from jedi>=0.16->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.8.4)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from jinja2>=2.9.6->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pandas->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.2)\n", - "Requirement already satisfied: tzdata>=2022.7 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pandas->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.2)\n", - "Requirement already satisfied: ptyprocess>=0.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pexpect>4.3->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.0)\n", - "Requirement already satisfied: json5>=0.8.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from reactome2py>=3.0.0->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.12.0)\n", - "Requirement already satisfied: charset_normalizer<4,>=2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.4.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.5.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.6.15)\n", - "Requirement already satisfied: memoir>=0.0.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from rsrc>=0.1.3->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.0.3)\n", - "Requirement already satisfied: reprit>=0.3.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from rsrc>=0.1.3->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.9.0)\n", - "Requirement already satisfied: joblib>=1.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from scikit-learn>=1.2->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.5.1)\n", - "Requirement already satisfied: threadpoolctl>=3.1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from scikit-learn>=1.2->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.6.0)\n", - "Requirement already satisfied: patsy>=0.5.6 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from statsmodels->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.1)\n", - "Requirement already satisfied: soupsieve>1.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from beautifulsoup4->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.7)\n", - "Requirement already satisfied: mpmath>=1.1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from combat->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.0)\n", - "Requirement already satisfied: ipywidgets>=7.0.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.1.7)\n", - "Requirement already satisfied: comm>=0.1.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.2)\n", - "Requirement already satisfied: widgetsnbextension~=4.0.14 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.0.14)\n", - "Requirement already satisfied: jupyterlab_widgets~=3.0.15 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.15)\n", - "Requirement already satisfied: Flask<3.1,>=1.0.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.3)\n", - "Requirement already satisfied: Werkzeug<3.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.6)\n", - "Requirement already satisfied: importlib-metadata in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.7.0)\n", - "Requirement already satisfied: retrying in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.5)\n", - "Requirement already satisfied: nest-asyncio in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.6.0)\n", - "Requirement already satisfied: itsdangerous>=2.1.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.0)\n", - "Requirement already satisfied: click>=8.1.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.2.1)\n", - "Requirement already satisfied: blinker>=1.6.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.9.0)\n", - "Requirement already satisfied: narwhals>=1.15.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from plotly->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.44.0)\n", - "Requirement already satisfied: openpyxl in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dsp-pandas->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.1.5)\n", - "Requirement already satisfied: zipp>=3.20 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from importlib-metadata->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.23.0)\n", - "Requirement already satisfied: fastcluster in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from inmoose->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.0)\n", - "Requirement already satisfied: choreographer>=1.0.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.9)\n", - "Requirement already satisfied: logistro>=1.0.8 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.0)\n", - "Requirement already satisfied: orjson>=3.10.15 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.10.18)\n", - "Requirement already satisfied: simplejson>=3.19.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from choreographer>=1.0.5->kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.20.1)\n", - "Requirement already satisfied: autograd>=1.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.8.0)\n", - "Requirement already satisfied: autograd-gamma>=0.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.0)\n", - "Requirement already satisfied: formulaic>=0.2.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.1)\n", - "Requirement already satisfied: interface-meta>=1.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from formulaic>=0.2.2->lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.0)\n", - "Requirement already satisfied: wrapt>=1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from formulaic>=0.2.2->lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.17.2)\n", - "Requirement already satisfied: regex>=2021.8.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nltk->vuecore==0.0.6.dev19+g58e96db.d20250624) (2024.11.6)\n", - "Requirement already satisfied: tqdm in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nltk->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.67.1)\n", - "Requirement already satisfied: et-xmlfile in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from openpyxl->dsp-pandas->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.0.0)\n", - "Requirement already satisfied: pandas-flavor in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pingouin->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.0)\n", - "Requirement already satisfied: tabulate in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pingouin->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.9.0)\n", - "Requirement already satisfied: xarray in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pandas-flavor->pingouin->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.6.1)\n", - "Requirement already satisfied: annotated-types>=0.6.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pydantic->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.33.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pydantic->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.33.2)\n", - "Requirement already satisfied: typing-inspection>=0.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pydantic->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.4.1)\n", - "Requirement already satisfied: executing>=1.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from stack_data->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.0)\n", - "Requirement already satisfied: asttokens>=2.1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from stack_data->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.0)\n", - "Requirement already satisfied: pure_eval in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from stack_data->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.3)\n", - "Requirement already satisfied: numba>=0.51.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from umap-learn->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.61.2)\n", - "Requirement already satisfied: pynndescent>=0.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from umap-learn->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.13)\n", - "Requirement already satisfied: llvmlite<0.45,>=0.44.0dev0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from numba>=0.51.2->umap-learn->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.44.0)\n", - "Using cached nbformat-5.10.4-py3-none-any.whl (78 kB)\n", - "Using cached fastjsonschema-2.21.1-py3-none-any.whl (23 kB)\n", - "Using cached jsonschema-4.24.0-py3-none-any.whl (88 kB)\n", - "Using cached attrs-25.3.0-py3-none-any.whl (63 kB)\n", - "Using cached jsonschema_specifications-2025.4.1-py3-none-any.whl (18 kB)\n", - "Using cached referencing-0.36.2-py3-none-any.whl (26 kB)\n", - "Using cached rpds_py-0.25.1-cp312-cp312-macosx_11_0_arm64.whl (350 kB)\n", - "Building wheels for collected packages: vuecore\n", - " Building wheel for vuecore (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for vuecore: filename=vuecore-0.0.6.dev19+g58e96db.d20250624-py3-none-any.whl size=55625 sha256=dbbfec57f735203a8482a18fcaf73e20e081423669249c13003a42369f4aff2c\n", - " Stored in directory: /private/var/folders/64/3nt358294s9cjcj1qbtv1g_h0000gp/T/pip-ephem-wheel-cache-8mu7llb7/wheels/b7/c2/2a/80a17c0f7fe0587d17a3dc604f395e41401dc2c1e23b377f0e\n", - "Successfully built vuecore\n", - "Installing collected packages: fastjsonschema, rpds-py, attrs, referencing, jsonschema-specifications, jsonschema, nbformat, vuecore\n", - "\u001b[2K Attempting uninstall: vuecore━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[32m6/8\u001b[0m [nbformat]a]]\n", - "\u001b[2K Found existing installation: vuecore 0.0.6.dev19+g58e96db.d20250624m6/8\u001b[0m [nbformat]\n", - "\u001b[2K Uninstalling vuecore-0.0.6.dev19+g58e96db.d20250624:━━━━━━\u001b[0m \u001b[32m6/8\u001b[0m [nbformat]\n", - "\u001b[2K Successfully uninstalled vuecore-0.0.6.dev19+g58e96db.d2025062432m6/8\u001b[0m [nbformat]\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8/8\u001b[0m [vuecore]m7/8\u001b[0m [vuecore]\n", - "\u001b[1A\u001b[2KSuccessfully installed attrs-25.3.0 fastjsonschema-2.21.1 jsonschema-4.24.0 jsonschema-specifications-2025.4.1 nbformat-5.10.4 referencing-0.36.2 rpds-py-0.25.1 vuecore-0.0.6.dev19+g58e96db.d20250624\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], + "outputs": [], "source": [ "# VueCore library\n", "%pip install vuecore" @@ -246,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "963a9529", "metadata": { "tags": [ @@ -256,6 +86,7 @@ "outputs": [], "source": [ "import os\n", + "\n", "IN_COLAB = \"COLAB_GPU\" in os.environ\n", "\n", "# Create a directory for outputs\n", @@ -305,108 +136,59 @@ "hide-input" ] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dayexperimentconditionvaluevalue_error
01AControl111.0
12AControl131.2
23AControl150.9
34AControl171.1
45AControl181.0
\n", - "
" - ], - "text/plain": [ - " day experiment condition value value_error\n", - "0 1 A Control 11 1.0\n", - "1 2 A Control 13 1.2\n", - "2 3 A Control 15 0.9\n", - "3 4 A Control 17 1.1\n", - "4 5 A Control 18 1.0" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "sample_df = pd.DataFrame({\n", - " \"day\": list(range(1, 6)) * 4, # 5 days\n", - " \"experiment\": [\"A\"] * 10 + [\"B\"] * 10, # 2 experiments\n", - " \"condition\": ([\"Control\"] * 5 + [\"Treatment\"] * 5) * 2, # 2 conditions\n", - " \"value\": [\n", - " 11, 13, 15, 17, 18, # A - Control\n", - " 10, 12, 14, 15, 16, # A - Treatment\n", - " 19, 20, 21, 22, 23, # B - Control\n", - " 20, 22, 21, 23, 22, # B - Treatment\n", - " ],\n", - " \"value_error\": [1, 1.2, 0.9, 1.1, 1.0, 1.3, 1.0, 1.2, 1.4, 1.1,\n", - " 2.0, 1.8, 2.1, 1.5, 2.3, 1.7, 2.0, 1.8, 2.1, 2.2],\n", - "})\n", + "sample_df = pd.DataFrame(\n", + " {\n", + " \"day\": list(range(1, 6)) * 4, # 5 days\n", + " \"experiment\": [\"A\"] * 10 + [\"B\"] * 10, # 2 experiments\n", + " \"condition\": ([\"Control\"] * 5 + [\"Treatment\"] * 5) * 2, # 2 conditions\n", + " \"value\": [\n", + " 11, # A - Control\n", + " 13, # A - Control\n", + " 15, # A - Control\n", + " 17, # A - Control\n", + " 18, # A - Control\n", + " 10, # A - Treatment\n", + " 12, # A - Treatment\n", + " 14, # A - Treatment\n", + " 15, # A - Treatment\n", + " 16, # A - Treatment\n", + " 19, # B - Control\n", + " 20, # B - Control\n", + " 21, # B - Control\n", + " 22, # B - Control\n", + " 23, # B - Control\n", + " 20, # B - Treatment\n", + " 22, # B - Treatment\n", + " 21, # B - Treatment\n", + " 23, # B - Treatment\n", + " 22, # B - Treatment\n", + " ],\n", + " \"value_error\": [\n", + " 1.0,\n", + " 1.2,\n", + " 0.9,\n", + " 1.1,\n", + " 1.0,\n", + " 1.3,\n", + " 1.0,\n", + " 1.2,\n", + " 1.4,\n", + " 1.1,\n", + " 2.0,\n", + " 1.8,\n", + " 2.1,\n", + " 1.5,\n", + " 2.3,\n", + " 1.7,\n", + " 2.0,\n", + " 1.8,\n", + " 2.1,\n", + " 2.2,\n", + " ],\n", + " }\n", + ")\n", "\n", "sample_df.head()" ] @@ -418,3948 +200,16 @@ "source": [ "## 1. Basic Line Plot\n", "A basic line plot can be created by simply providing the `x`, `y`, and\n", - "`color` columns from the DataFrame." + "`color` columns from the DataFrame\n", + "using [`create_line_plot`](vuecore.plots.basic.line.create_line_plot)." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "d0d34455", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/line_plot_basic.png\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define output path for the basic png plot\n", "file_path_basic_png = Path(output_dir) / \"line_plot_basic.png\"\n", @@ -4390,51 +240,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "f9307e85", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/line_plot_advanced.html\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define output file path for the HTML plot\n", "file_path_adv_html = Path(output_dir) / \"line_plot_advanced.html\"\n", @@ -4455,12 +264,8 @@ " \"condition\": \"Condition\",\n", " \"experiment\": \"Experiment\",\n", " },\n", - " color_discrete_map={\n", - " \"A\": \"#508AA8\",\n", - " \"B\": \"#A8505E\"},\n", - " line_dash_map={\n", - " \"Control\": \"solid\",\n", - " \"Treatment\": \"dot\"},\n", + " color_discrete_map={\"A\": \"#508AA8\", \"B\": \"#A8505E\"},\n", + " line_dash_map={\"Control\": \"solid\", \"Treatment\": \"dot\"},\n", " markers=True,\n", " line_shape=\"spline\",\n", " file_path=file_path_adv_html,\n", @@ -4486,7 +291,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.11" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/docs/api_examples/line_plot.py b/docs/api_examples/line_plot.py index e62f9d9..b887f03 100644 --- a/docs/api_examples/line_plot.py +++ b/docs/api_examples/line_plot.py @@ -62,6 +62,7 @@ # %% tags=["hide-cell"] import os + IN_COLAB = "COLAB_GPU" in os.environ # Create a directory for outputs @@ -85,26 +86,65 @@ # conditions, with associated measurement errors. # %% tags=["hide-input"] -sample_df = pd.DataFrame({ - "day": list(range(1, 6)) * 4, # 5 days - "experiment": ["A"] * 10 + ["B"] * 10, # 2 experiments - "condition": (["Control"] * 5 + ["Treatment"] * 5) * 2, # 2 conditions - "value": [ - 11, 13, 15, 17, 18, # A - Control - 10, 12, 14, 15, 16, # A - Treatment - 19, 20, 21, 22, 23, # B - Control - 20, 22, 21, 23, 22, # B - Treatment - ], - "value_error": [1, 1.2, 0.9, 1.1, 1.0, 1.3, 1.0, 1.2, 1.4, 1.1, - 2.0, 1.8, 2.1, 1.5, 2.3, 1.7, 2.0, 1.8, 2.1, 2.2], -}) +sample_df = pd.DataFrame( + { + "day": list(range(1, 6)) * 4, # 5 days + "experiment": ["A"] * 10 + ["B"] * 10, # 2 experiments + "condition": (["Control"] * 5 + ["Treatment"] * 5) * 2, # 2 conditions + "value": [ + 11, # A - Control + 13, # A - Control + 15, # A - Control + 17, # A - Control + 18, # A - Control + 10, # A - Treatment + 12, # A - Treatment + 14, # A - Treatment + 15, # A - Treatment + 16, # A - Treatment + 19, # B - Control + 20, # B - Control + 21, # B - Control + 22, # B - Control + 23, # B - Control + 20, # B - Treatment + 22, # B - Treatment + 21, # B - Treatment + 23, # B - Treatment + 22, # B - Treatment + ], + "value_error": [ + 1.0, + 1.2, + 0.9, + 1.1, + 1.0, + 1.3, + 1.0, + 1.2, + 1.4, + 1.1, + 2.0, + 1.8, + 2.1, + 1.5, + 2.3, + 1.7, + 2.0, + 1.8, + 2.1, + 2.2, + ], + } +) sample_df.head() # %% [markdown] # ## 1. Basic Line Plot # A basic line plot can be created by simply providing the `x`, `y`, and -# `color` columns from the DataFrame. +# `color` columns from the DataFrame +# using [`create_line_plot`](vuecore.plots.basic.line.create_line_plot). # %% # Define output path for the basic png plot @@ -148,12 +188,8 @@ "condition": "Condition", "experiment": "Experiment", }, - color_discrete_map={ - "A": "#508AA8", - "B": "#A8505E"}, - line_dash_map={ - "Control": "solid", - "Treatment": "dot"}, + color_discrete_map={"A": "#508AA8", "B": "#A8505E"}, + line_dash_map={"Control": "solid", "Treatment": "dot"}, markers=True, line_shape="spline", file_path=file_path_adv_html, diff --git a/docs/api_examples/scatter_plot.ipynb b/docs/api_examples/scatter_plot.ipynb index 9339e56..e530c6c 100644 --- a/docs/api_examples/scatter_plot.ipynb +++ b/docs/api_examples/scatter_plot.ipynb @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "36246ed6", "metadata": { "tags": [ @@ -73,168 +73,137 @@ "name": "stdout", "output_type": "stream", "text": [ - "Processing /Users/asaru/Documents/DTU/MoNA/VueCore/vuecore\n", - " Installing build dependencies ... \u001b[?25ldone\n", - "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", - "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25hRequirement already satisfied: numpy in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.6)\n", - "Requirement already satisfied: pandas in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.3.0)\n", - "Requirement already satisfied: scipy in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.16.0)\n", - "Requirement already satisfied: plotly in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (6.1.2)\n", - "Requirement already satisfied: beautifulsoup4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (4.13.4)\n", - "Requirement already satisfied: requests in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.32.4)\n", - "Requirement already satisfied: dash in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.4)\n", - "Requirement already satisfied: networkx in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.5)\n", - "Requirement already satisfied: matplotlib in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.10.3)\n", - "Requirement already satisfied: kaleido in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.0)\n", - "Requirement already satisfied: pyvis in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.3.1)\n", - "Requirement already satisfied: wordcloud in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.9.4)\n", - "Requirement already satisfied: cyjupyter in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.0)\n", - "Requirement already satisfied: nltk in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (3.9.1)\n", - "Requirement already satisfied: webweb in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.0.37)\n", - "Requirement already satisfied: acore in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (0.1.3)\n", - "Requirement already satisfied: dash-cytoscape in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.2)\n", - "Requirement already satisfied: pydantic in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from vuecore==0.0.6.dev19+g58e96db.d20250624) (2.11.7)\n", - "Collecting nbformat>=4.2.0 (from vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached nbformat-5.10.4-py3-none-any.whl.metadata (3.6 kB)\n", - "Collecting fastjsonschema>=2.15 (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached fastjsonschema-2.21.1-py3-none-any.whl.metadata (2.2 kB)\n", - "Collecting jsonschema>=2.6 (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached jsonschema-4.24.0-py3-none-any.whl.metadata (7.8 kB)\n", - "Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (5.8.1)\n", - "Requirement already satisfied: traitlets>=5.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (5.14.3)\n", - "Collecting attrs>=22.2.0 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached attrs-25.3.0-py3-none-any.whl.metadata (10 kB)\n", - "Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached jsonschema_specifications-2025.4.1-py3-none-any.whl.metadata (2.9 kB)\n", - "Collecting referencing>=0.28.4 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached referencing-0.36.2-py3-none-any.whl.metadata (2.8 kB)\n", - "Collecting rpds-py>=0.7.1 (from jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624)\n", - " Using cached rpds_py-0.25.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (4.1 kB)\n", - "Requirement already satisfied: platformdirs>=2.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from jupyter-core!=5.0.*,>=4.12->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.3.8)\n", - "Requirement already satisfied: typing-extensions>=4.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from referencing>=0.28.4->jsonschema>=2.6->nbformat>=4.2.0->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.14.0)\n", - "Requirement already satisfied: dsp-pandas in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.0.5)\n", - "Requirement already satisfied: scikit-learn>=1.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.7.0)\n", - "Requirement already satisfied: biopython in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.85)\n", - "Requirement already satisfied: combat in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.3.3)\n", - "Requirement already satisfied: gseapy!=1.1.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.9)\n", - "Requirement already satisfied: kmapper in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.1.0)\n", - "Requirement already satisfied: lifelines in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.30.0)\n", - "Requirement already satisfied: pingouin in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.5)\n", - "Requirement already satisfied: python-louvain in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.16)\n", - "Requirement already satisfied: PyWGCNA!=2.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.1)\n", - "Requirement already satisfied: snfpy in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.2)\n", - "Requirement already satisfied: umap-learn in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.7)\n", - "Requirement already satisfied: statsmodels in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.14.4)\n", - "Requirement already satisfied: inmoose in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.7)\n", - "Requirement already satisfied: rarfile in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.2)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.2)\n", - "Requirement already satisfied: cycler>=0.10 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.58.4)\n", - "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.4.8)\n", - "Requirement already satisfied: packaging>=20.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (25.0)\n", - "Requirement already satisfied: pillow>=8 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (11.2.1)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.2.3)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.9.0.post0)\n", - "Requirement already satisfied: six>=1.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from python-dateutil>=2.7->matplotlib->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.17.0)\n", - "Requirement already satisfied: seaborn>=0.11.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.13.2)\n", - "Requirement already satisfied: biomart>=0.9.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.9.2)\n", - "Requirement already satisfied: setuptools>=67.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (80.9.0)\n", - "Requirement already satisfied: reactome2py>=3.0.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.0)\n", - "Requirement already satisfied: anndata>=0.10.8 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.11.4)\n", - "Requirement already satisfied: rsrc>=0.1.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.1.3)\n", - "Requirement already satisfied: psutil>=5.9.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (7.0.0)\n", - "Requirement already satisfied: jinja2>=2.9.6 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.1.6)\n", - "Requirement already satisfied: ipython>=5.3.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (9.3.0)\n", - "Requirement already satisfied: jsonpickle>=1.4.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.1.1)\n", - "Requirement already satisfied: array-api-compat!=1.5,>1.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.12.0)\n", - "Requirement already satisfied: h5py>=3.7 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.14.0)\n", - "Requirement already satisfied: natsort in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.4.0)\n", - "Requirement already satisfied: decorator in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (5.2.1)\n", - "Requirement already satisfied: ipython-pygments-lexers in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.1)\n", - "Requirement already satisfied: jedi>=0.16 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.19.2)\n", - "Requirement already satisfied: matplotlib-inline in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.1.7)\n", - "Requirement already satisfied: pexpect>4.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.9.0)\n", - "Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.51)\n", - "Requirement already satisfied: pygments>=2.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.19.2)\n", - "Requirement already satisfied: stack_data in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.6.3)\n", - "Requirement already satisfied: wcwidth in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.13)\n", - "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from jedi>=0.16->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.8.4)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from jinja2>=2.9.6->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pandas->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.2)\n", - "Requirement already satisfied: tzdata>=2022.7 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pandas->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.2)\n", - "Requirement already satisfied: ptyprocess>=0.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pexpect>4.3->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.0)\n", - "Requirement already satisfied: json5>=0.8.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from reactome2py>=3.0.0->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.12.0)\n", - "Requirement already satisfied: charset_normalizer<4,>=2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.4.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.5.0)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from requests->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.6.15)\n", - "Requirement already satisfied: memoir>=0.0.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from rsrc>=0.1.3->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.0.3)\n", - "Requirement already satisfied: reprit>=0.3.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from rsrc>=0.1.3->PyWGCNA!=2.2.0->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.9.0)\n", - "Requirement already satisfied: joblib>=1.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from scikit-learn>=1.2->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.5.1)\n", - "Requirement already satisfied: threadpoolctl>=3.1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from scikit-learn>=1.2->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.6.0)\n", - "Requirement already satisfied: patsy>=0.5.6 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from statsmodels->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.1)\n", - "Requirement already satisfied: soupsieve>1.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from beautifulsoup4->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.7)\n", - "Requirement already satisfied: mpmath>=1.1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from combat->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.0)\n", - "Requirement already satisfied: ipywidgets>=7.0.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.1.7)\n", - "Requirement already satisfied: comm>=0.1.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.2)\n", - "Requirement already satisfied: widgetsnbextension~=4.0.14 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.0.14)\n", - "Requirement already satisfied: jupyterlab_widgets~=3.0.15 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.15)\n", - "Requirement already satisfied: Flask<3.1,>=1.0.4 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.3)\n", - "Requirement already satisfied: Werkzeug<3.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.6)\n", - "Requirement already satisfied: importlib-metadata in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.7.0)\n", - "Requirement already satisfied: retrying in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.5)\n", - "Requirement already satisfied: nest-asyncio in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.6.0)\n", - "Requirement already satisfied: itsdangerous>=2.1.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.0)\n", - "Requirement already satisfied: click>=8.1.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (8.2.1)\n", - "Requirement already satisfied: blinker>=1.6.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.9.0)\n", - "Requirement already satisfied: narwhals>=1.15.1 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from plotly->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.44.0)\n", - "Requirement already satisfied: openpyxl in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from dsp-pandas->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.1.5)\n", - "Requirement already satisfied: zipp>=3.20 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from importlib-metadata->dash->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.23.0)\n", - "Requirement already satisfied: fastcluster in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from inmoose->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.0)\n", - "Requirement already satisfied: choreographer>=1.0.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.0.9)\n", - "Requirement already satisfied: logistro>=1.0.8 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.0)\n", - "Requirement already satisfied: orjson>=3.10.15 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.10.18)\n", - "Requirement already satisfied: simplejson>=3.19.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from choreographer>=1.0.5->kaleido->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.20.1)\n", - "Requirement already satisfied: autograd>=1.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.8.0)\n", - "Requirement already satisfied: autograd-gamma>=0.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.0)\n", - "Requirement already satisfied: formulaic>=0.2.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.1.1)\n", - "Requirement already satisfied: interface-meta>=1.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from formulaic>=0.2.2->lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.3.0)\n", - "Requirement already satisfied: wrapt>=1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from formulaic>=0.2.2->lifelines->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (1.17.2)\n", - "Requirement already satisfied: regex>=2021.8.3 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nltk->vuecore==0.0.6.dev19+g58e96db.d20250624) (2024.11.6)\n", - "Requirement already satisfied: tqdm in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from nltk->vuecore==0.0.6.dev19+g58e96db.d20250624) (4.67.1)\n", - "Requirement already satisfied: et-xmlfile in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from openpyxl->dsp-pandas->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.0.0)\n", - "Requirement already satisfied: pandas-flavor in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pingouin->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.0)\n", - "Requirement already satisfied: tabulate in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pingouin->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.9.0)\n", - "Requirement already satisfied: xarray in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pandas-flavor->pingouin->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (2025.6.1)\n", - "Requirement already satisfied: annotated-types>=0.6.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pydantic->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.33.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pydantic->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.33.2)\n", - "Requirement already satisfied: typing-inspection>=0.4.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from pydantic->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.4.1)\n", - "Requirement already satisfied: executing>=1.2.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from stack_data->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (2.2.0)\n", - "Requirement already satisfied: asttokens>=2.1.0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from stack_data->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (3.0.0)\n", - "Requirement already satisfied: pure_eval in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from stack_data->ipython>=5.3.0->pyvis->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.2.3)\n", - "Requirement already satisfied: numba>=0.51.2 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from umap-learn->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.61.2)\n", - "Requirement already satisfied: pynndescent>=0.5 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from umap-learn->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.5.13)\n", - "Requirement already satisfied: llvmlite<0.45,>=0.44.0dev0 in /Users/asaru/miniconda3/envs/vuecore-dev/lib/python3.12/site-packages (from numba>=0.51.2->umap-learn->acore->vuecore==0.0.6.dev19+g58e96db.d20250624) (0.44.0)\n", - "Using cached nbformat-5.10.4-py3-none-any.whl (78 kB)\n", - "Using cached fastjsonschema-2.21.1-py3-none-any.whl (23 kB)\n", - "Using cached jsonschema-4.24.0-py3-none-any.whl (88 kB)\n", - "Using cached attrs-25.3.0-py3-none-any.whl (63 kB)\n", - "Using cached jsonschema_specifications-2025.4.1-py3-none-any.whl (18 kB)\n", - "Using cached referencing-0.36.2-py3-none-any.whl (26 kB)\n", - "Using cached rpds_py-0.25.1-cp312-cp312-macosx_11_0_arm64.whl (350 kB)\n", - "Building wheels for collected packages: vuecore\n", - " Building wheel for vuecore (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for vuecore: filename=vuecore-0.0.6.dev19+g58e96db.d20250624-py3-none-any.whl size=55625 sha256=dbbfec57f735203a8482a18fcaf73e20e081423669249c13003a42369f4aff2c\n", - " Stored in directory: /private/var/folders/64/3nt358294s9cjcj1qbtv1g_h0000gp/T/pip-ephem-wheel-cache-8mu7llb7/wheels/b7/c2/2a/80a17c0f7fe0587d17a3dc604f395e41401dc2c1e23b377f0e\n", - "Successfully built vuecore\n", - "Installing collected packages: fastjsonschema, rpds-py, attrs, referencing, jsonschema-specifications, jsonschema, nbformat, vuecore\n", - "\u001b[2K Attempting uninstall: vuecore━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[32m6/8\u001b[0m [nbformat]a]]\n", - "\u001b[2K Found existing installation: vuecore 0.0.6.dev19+g58e96db.d20250624m6/8\u001b[0m [nbformat]\n", - "\u001b[2K Uninstalling vuecore-0.0.6.dev19+g58e96db.d20250624:━━━━━━\u001b[0m \u001b[32m6/8\u001b[0m [nbformat]\n", - "\u001b[2K Successfully uninstalled vuecore-0.0.6.dev19+g58e96db.d2025062432m6/8\u001b[0m [nbformat]\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8/8\u001b[0m [vuecore]m7/8\u001b[0m [vuecore]\n", - "\u001b[1A\u001b[2KSuccessfully installed attrs-25.3.0 fastjsonschema-2.21.1 jsonschema-4.24.0 jsonschema-specifications-2025.4.1 nbformat-5.10.4 referencing-0.36.2 rpds-py-0.25.1 vuecore-0.0.6.dev19+g58e96db.d20250624\n", + "Requirement already satisfied: vuecore in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (0.0.6.dev66+g88ca84c3f.d20250918)\n", + "Requirement already satisfied: numpy in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (1.26.4)\n", + "Requirement already satisfied: pandas in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (2.2.3)\n", + "Requirement already satisfied: scipy in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (1.14.1)\n", + "Requirement already satisfied: plotly in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (5.24.1)\n", + "Requirement already satisfied: beautifulsoup4 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (4.12.3)\n", + "Requirement already satisfied: requests in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (2.32.3)\n", + "Requirement already satisfied: dash in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (2.18.2)\n", + "Requirement already satisfied: networkx in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (3.4.1)\n", + "Requirement already satisfied: matplotlib in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (3.9.2)\n", + "Requirement already satisfied: kaleido in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (0.2.1)\n", + "Requirement already satisfied: pyvis in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (0.3.1)\n", + "Requirement already satisfied: wordcloud in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (1.9.4)\n", + "Requirement already satisfied: cyjupyter in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (0.2.0)\n", + "Requirement already satisfied: nltk in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (3.9.1)\n", + "Requirement already satisfied: webweb in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (0.0.37)\n", + "Requirement already satisfied: acore in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (0.2.1.dev16+g403241e60.d20250902)\n", + "Requirement already satisfied: dash-cytoscape in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (1.0.2)\n", + "Requirement already satisfied: pydantic in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (2.11.5)\n", + "Requirement already satisfied: nbformat>=4.2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from vuecore) (5.10.4)\n", + "Requirement already satisfied: fastjsonschema>=2.15 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nbformat>=4.2.0->vuecore) (2.20.0)\n", + "Requirement already satisfied: jsonschema>=2.6 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nbformat>=4.2.0->vuecore) (4.23.0)\n", + "Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nbformat>=4.2.0->vuecore) (5.7.2)\n", + "Requirement already satisfied: traitlets>=5.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nbformat>=4.2.0->vuecore) (5.14.3)\n", + "Requirement already satisfied: dsp-pandas in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.0.4.dev0+g61107b9.d20241118)\n", + "Requirement already satisfied: scikit-learn>=1.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (1.5.2)\n", + "Requirement already satisfied: biopython in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (1.84)\n", + "Requirement already satisfied: combat in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.3.3)\n", + "Requirement already satisfied: gseapy!=1.1.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (1.1.3)\n", + "Requirement already satisfied: kmapper in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (2.1.0)\n", + "Requirement already satisfied: lifelines in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.29.0)\n", + "Requirement already satisfied: pingouin in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.5.5)\n", + "Requirement already satisfied: python-louvain in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.16)\n", + "Requirement already satisfied: PyWGCNA!=2.2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (2.1.2)\n", + "Requirement already satisfied: snfpy in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.2.2)\n", + "Requirement already satisfied: umap-learn in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.5.6)\n", + "Requirement already satisfied: statsmodels in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.14.4)\n", + "Requirement already satisfied: inmoose in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (0.7.2)\n", + "Requirement already satisfied: rarfile in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from acore->vuecore) (4.2)\n", + "Requirement already satisfied: soupsieve>1.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from beautifulsoup4->vuecore) (2.6)\n", + "Requirement already satisfied: ipywidgets>=7.0.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from cyjupyter->vuecore) (8.1.5)\n", + "Requirement already satisfied: Flask<3.1,>=1.0.4 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (3.0.3)\n", + "Requirement already satisfied: Werkzeug<3.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (3.0.6)\n", + "Requirement already satisfied: dash-html-components==2.0.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (2.0.0)\n", + "Requirement already satisfied: dash-core-components==2.0.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (2.0.0)\n", + "Requirement already satisfied: dash-table==5.0.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (5.0.0)\n", + "Requirement already satisfied: importlib-metadata in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (8.5.0)\n", + "Requirement already satisfied: typing-extensions>=4.1.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (4.14.0)\n", + "Requirement already satisfied: retrying in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (1.3.4)\n", + "Requirement already satisfied: nest-asyncio in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (1.6.0)\n", + "Requirement already satisfied: setuptools in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dash->vuecore) (75.1.0)\n", + "Requirement already satisfied: tenacity>=6.2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from plotly->vuecore) (9.0.0)\n", + "Requirement already satisfied: packaging in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from plotly->vuecore) (24.1)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (1.3.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (4.54.1)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (1.4.7)\n", + "Requirement already satisfied: pillow>=8 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (10.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (3.2.0)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from matplotlib->vuecore) (2.9.0)\n", + "Requirement already satisfied: click in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nltk->vuecore) (8.1.7)\n", + "Requirement already satisfied: joblib in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nltk->vuecore) (1.4.2)\n", + "Requirement already satisfied: regex>=2021.8.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nltk->vuecore) (2024.11.6)\n", + "Requirement already satisfied: tqdm in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from nltk->vuecore) (4.66.5)\n", + "Requirement already satisfied: pytz>=2020.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pandas->vuecore) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pandas->vuecore) (2024.2)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pydantic->vuecore) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.33.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pydantic->vuecore) (2.33.2)\n", + "Requirement already satisfied: typing-inspection>=0.4.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pydantic->vuecore) (0.4.1)\n", + "Requirement already satisfied: jinja2>=2.9.6 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pyvis->vuecore) (3.1.4)\n", + "Requirement already satisfied: ipython>=5.3.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pyvis->vuecore) (8.28.0)\n", + "Requirement already satisfied: jsonpickle>=1.4.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pyvis->vuecore) (3.3.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from requests->vuecore) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from requests->vuecore) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from requests->vuecore) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from requests->vuecore) (2024.8.30)\n", + "Requirement already satisfied: itsdangerous>=2.1.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore) (2.2.0)\n", + "Requirement already satisfied: blinker>=1.6.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from Flask<3.1,>=1.0.4->dash->vuecore) (1.9.0)\n", + "Requirement already satisfied: decorator in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (5.1.1)\n", + "Requirement already satisfied: jedi>=0.16 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (0.19.1)\n", + "Requirement already satisfied: matplotlib-inline in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (0.1.7)\n", + "Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (3.0.48)\n", + "Requirement already satisfied: pygments>=2.4.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (2.18.0)\n", + "Requirement already satisfied: stack-data in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (0.6.2)\n", + "Requirement already satisfied: pexpect>4.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis->vuecore) (4.9.0)\n", + "Requirement already satisfied: comm>=0.1.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore) (0.2.2)\n", + "Requirement already satisfied: widgetsnbextension~=4.0.12 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore) (4.0.13)\n", + "Requirement already satisfied: jupyterlab-widgets~=3.0.12 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from ipywidgets>=7.0.0->cyjupyter->vuecore) (3.0.13)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jinja2>=2.9.6->pyvis->vuecore) (3.0.1)\n", + "Requirement already satisfied: attrs>=22.2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat>=4.2.0->vuecore) (24.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat>=4.2.0->vuecore) (2024.10.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat>=4.2.0->vuecore) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat>=4.2.0->vuecore) (0.20.0)\n", + "Requirement already satisfied: platformdirs>=2.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jupyter-core!=5.0.*,>=4.12->nbformat>=4.2.0->vuecore) (4.3.6)\n", + "Requirement already satisfied: six>=1.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->vuecore) (1.16.0)\n", + "Requirement already satisfied: seaborn>=0.11.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from PyWGCNA!=2.2.0->acore->vuecore) (0.13.2)\n", + "Requirement already satisfied: biomart>=0.9.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from PyWGCNA!=2.2.0->acore->vuecore) (0.9.2)\n", + "Requirement already satisfied: reactome2py>=3.0.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from PyWGCNA!=2.2.0->acore->vuecore) (3.0.0)\n", + "Requirement already satisfied: anndata>=0.10.8 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from PyWGCNA!=2.2.0->acore->vuecore) (0.10.9)\n", + "Requirement already satisfied: rsrc>=0.1.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from PyWGCNA!=2.2.0->acore->vuecore) (0.1.3)\n", + "Requirement already satisfied: psutil>=5.9.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from PyWGCNA!=2.2.0->acore->vuecore) (6.0.0)\n", + "Requirement already satisfied: threadpoolctl>=3.1.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from scikit-learn>=1.5->acore->vuecore) (3.5.0)\n", + "Requirement already satisfied: patsy>=0.5.6 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from statsmodels->acore->vuecore) (0.5.6)\n", + "Requirement already satisfied: mpmath>=1.1.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from combat->acore->vuecore) (1.3.0)\n", + "Requirement already satisfied: openpyxl in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from dsp-pandas->acore->vuecore) (3.1.5)\n", + "Requirement already satisfied: zipp>=3.20 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from importlib-metadata->dash->vuecore) (3.20.2)\n", + "Requirement already satisfied: fastcluster in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from inmoose->acore->vuecore) (1.2.6)\n", + "Requirement already satisfied: autograd>=1.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from lifelines->acore->vuecore) (1.7.0)\n", + "Requirement already satisfied: autograd-gamma>=0.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from lifelines->acore->vuecore) (0.5.0)\n", + "Requirement already satisfied: formulaic>=0.2.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from lifelines->acore->vuecore) (1.0.2)\n", + "Requirement already satisfied: pandas-flavor in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pingouin->acore->vuecore) (0.6.0)\n", + "Requirement already satisfied: tabulate in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pingouin->acore->vuecore) (0.9.0)\n", + "Requirement already satisfied: numba>=0.51.2 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from umap-learn->acore->vuecore) (0.60.0)\n", + "Requirement already satisfied: pynndescent>=0.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from umap-learn->acore->vuecore) (0.5.13)\n", + "Requirement already satisfied: array-api-compat!=1.5,>1.4 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore) (1.9)\n", + "Requirement already satisfied: h5py>=3.1 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore) (3.12.1)\n", + "Requirement already satisfied: natsort in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from anndata>=0.10.8->PyWGCNA!=2.2.0->acore->vuecore) (8.4.0)\n", + "Requirement already satisfied: interface-meta>=1.2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from formulaic>=0.2.2->lifelines->acore->vuecore) (1.3.0)\n", + "Requirement already satisfied: wrapt>=1.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from formulaic>=0.2.2->lifelines->acore->vuecore) (1.16.0)\n", + "Requirement already satisfied: parso<0.9.0,>=0.8.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from jedi>=0.16->ipython>=5.3.0->pyvis->vuecore) (0.8.4)\n", + "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from numba>=0.51.2->umap-learn->acore->vuecore) (0.43.0)\n", + "Requirement already satisfied: ptyprocess>=0.5 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pexpect>4.3->ipython>=5.3.0->pyvis->vuecore) (0.7.0)\n", + "Requirement already satisfied: wcwidth in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from prompt-toolkit<3.1.0,>=3.0.41->ipython>=5.3.0->pyvis->vuecore) (0.2.13)\n", + "Requirement already satisfied: json5>=0.8.4 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from reactome2py>=3.0.0->PyWGCNA!=2.2.0->acore->vuecore) (0.9.25)\n", + "Requirement already satisfied: memoir>=0.0.3 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from rsrc>=0.1.3->PyWGCNA!=2.2.0->acore->vuecore) (0.0.3)\n", + "Requirement already satisfied: reprit>=0.3.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from rsrc>=0.1.3->PyWGCNA!=2.2.0->acore->vuecore) (0.9.0)\n", + "Requirement already satisfied: et-xmlfile in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from openpyxl->dsp-pandas->acore->vuecore) (2.0.0)\n", + "Requirement already satisfied: xarray in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from pandas-flavor->pingouin->acore->vuecore) (2024.9.0)\n", + "Requirement already satisfied: executing>=1.2.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from stack-data->ipython>=5.3.0->pyvis->vuecore) (2.1.0)\n", + "Requirement already satisfied: asttokens>=2.1.0 in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from stack-data->ipython>=5.3.0->pyvis->vuecore) (2.4.1)\n", + "Requirement already satisfied: pure-eval in /Users/heweb/miniforge3/envs/acore/lib/python3.11/site-packages (from stack-data->ipython>=5.3.0->pyvis->vuecore) (0.2.3)\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } @@ -246,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "963a9529", "metadata": { "tags": [ @@ -257,20 +226,8 @@ "source": [ "import os\n", "\n", - "IN_COLAB = \"COLAB_GPU\" in os.environ" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "ee2ffd40", - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ + "IN_COLAB = \"COLAB_GPU\" in os.environ\n", + "\n", "# Create a directory for outputs\n", "output_dir = \"./outputs\"\n", "os.makedirs(output_dir, exist_ok=True)" @@ -291,10 +248,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Imports\n", - "import pandas as pd\n", "from pathlib import Path\n", "\n", + "import pandas as pd\n", + "\n", "from vuecore.plots.basic.scatter import create_scatter_plot" ] }, @@ -309,9 +266,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "82dfaf45", - "metadata": {}, + "metadata": { + "tags": [ + "hide-input" + ] + }, "outputs": [ { "data": { @@ -441,7 +402,7 @@ "7 B " ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -476,3946 +437,27 @@ "metadata": {}, "source": [ "## 1. Basic Scatter Plot\n", - "A basic scatter plot can be created by providing the `x` and `y` columns from the DataFrame, along with style options like `title`." + "A basic scatter plot can be created by providing the `x` and `y` columns \n", + "from the DataFrame, along with style options like `title` \n", + "using [`create_scatter_plot`](vuecore.plots.basic.scatter.create_scatter_plot)." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "d0d34455", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to ./outputs/scatter_basic.png\n" + "ename": "NameError", + "evalue": "name 'Path' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Define output path for the basic png plot\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m file_path_basic_png \u001b[38;5;241m=\u001b[39m \u001b[43mPath\u001b[49m(output_dir) \u001b[38;5;241m/\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mscatter_basic.png\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;66;03m# Generate the basic scatter plot\u001b[39;00m\n\u001b[1;32m 5\u001b[0m scatter_plot_basic \u001b[38;5;241m=\u001b[39m create_scatter_plot(\n\u001b[1;32m 6\u001b[0m data\u001b[38;5;241m=\u001b[39msample_df,\n\u001b[1;32m 7\u001b[0m x\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgene_expression\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 10\u001b[0m file_path\u001b[38;5;241m=\u001b[39mfile_path_basic_png,\n\u001b[1;32m 11\u001b[0m )\n", + "\u001b[0;31mNameError\u001b[0m: name 'Path' is not defined" ] - }, - { - "data": { - "text/html": [ - " \n", - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ @@ -4448,48 +490,7 @@ "execution_count": null, "id": "f9307e85", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to ./outputs/scatter_advanced.html\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define output file path for the HTML plot\n", "file_path_adv_html = Path(output_dir) / \"scatter_advanced.html\"\n", @@ -4540,7 +541,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.11" + "version": "3.11.10" } }, "nbformat": 4, diff --git a/docs/api_examples/scatter_plot.py b/docs/api_examples/scatter_plot.py index 95c15e2..089942e 100644 --- a/docs/api_examples/scatter_plot.py +++ b/docs/api_examples/scatter_plot.py @@ -65,7 +65,6 @@ IN_COLAB = "COLAB_GPU" in os.environ -# %% tags=["hide-cell"] # Create a directory for outputs output_dir = "./outputs" os.makedirs(output_dir, exist_ok=True) @@ -74,17 +73,17 @@ # ### 0.2. Importing libraries # %% -# Imports -import pandas as pd from pathlib import Path +import pandas as pd + from vuecore.plots.basic.scatter import create_scatter_plot # %% [markdown] # ### 0.3. Create sample data # We create a synthetic dataset that contains simulated gene expression values, p-values, regulation status, and significance scores for 8 genes across two cell types. -# %% +# %% tags=["hide-input"] sample_df = pd.DataFrame( { "gene_expression": [1.2, 2.5, 3.1, 4.5, 5.2, 6.8, 3.9, 2.1], @@ -109,7 +108,9 @@ # %% [markdown] # ## 1. Basic Scatter Plot -# A basic scatter plot can be created by providing the `x` and `y` columns from the DataFrame, along with style options like `title`. +# A basic scatter plot can be created by providing the `x` and `y` columns +# from the DataFrame, along with style options like `title` +# using [`create_scatter_plot`](vuecore.plots.basic.scatter.create_scatter_plot). # %% # Define output path for the basic png plot From 1a18e42c4d775a64e6cdfa2dcbfef77503e33498 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:43:24 +0200 Subject: [PATCH 05/11] :art: apply changes to ipynb --- docs/api_examples/box_violin_plot.ipynb | 4171 +---------------------- 1 file changed, 51 insertions(+), 4120 deletions(-) diff --git a/docs/api_examples/box_violin_plot.ipynb b/docs/api_examples/box_violin_plot.ipynb index 4572c46..4934ccc 100644 --- a/docs/api_examples/box_violin_plot.ipynb +++ b/docs/api_examples/box_violin_plot.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "640ba1d5", + "id": "154f4359", "metadata": {}, "source": [ "# Box and Violin Plots\n", @@ -42,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "3b504dfb", + "id": "887daba4", "metadata": {}, "source": [ "## 0. Work environment setup" @@ -50,7 +50,7 @@ }, { "cell_type": "markdown", - "id": "f0c056a7", + "id": "631fd4d6", "metadata": {}, "source": [ "### 0.1. Installing libraries and creating global variables for platform and working directory\n", @@ -61,7 +61,7 @@ { "cell_type": "code", "execution_count": null, - "id": "36246ed6", + "id": "55d473dc", "metadata": { "tags": [ "hide-output" @@ -75,8 +75,8 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "963a9529", + "execution_count": null, + "id": "32202a4b", "metadata": { "tags": [ "hide-cell" @@ -86,20 +86,8 @@ "source": [ "import os\n", "\n", - "IN_COLAB = \"COLAB_GPU\" in os.environ" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "ee2ffd40", - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ + "IN_COLAB = \"COLAB_GPU\" in os.environ\n", + "\n", "# Create a directory for outputs\n", "output_dir = \"./outputs\"\n", "os.makedirs(output_dir, exist_ok=True)" @@ -107,25 +95,27 @@ }, { "cell_type": "markdown", - "id": "31638f9a", - "metadata": {}, + "id": "88e1d232", + "metadata": { + "lines_to_next_cell": 0 + }, "source": [ "### 0.2. Importing libraries" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "06dbf6a2", + "execution_count": null, + "id": "f9c1c5df", "metadata": {}, "outputs": [], "source": [ - "# Imports\n", - "import pandas as pd\n", - "import numpy as np\n", "from pathlib import Path\n", "import plotly.io as pio\n", "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", "from vuecore.plots.basic.box import create_box_plot\n", "from vuecore.plots.basic.violin import create_violin_plot\n", "\n", @@ -135,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "5cc60050", + "id": "3a6a5b07", "metadata": {}, "source": [ "### 0.3. Create sample data\n", @@ -144,9 +134,13 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "ac2db647", - "metadata": {}, + "execution_count": null, + "id": "fd4e573a", + "metadata": { + "tags": [ + "hide-input" + ] + }, "outputs": [], "source": [ "# Set a random seed for reproducibility of the synthetic data\n", @@ -169,7 +163,7 @@ "treatment_effect = np.where(\n", " treatment_assignments == \"Treated\",\n", " np.random.normal(loc=50, scale=30, size=num_samples),\n", - " 0\n", + " 0,\n", ")\n", "\n", "# Small random per-gene offset for extra variability\n", @@ -179,3962 +173,34 @@ "expr = base_expr + treatment_effect + gene_offset\n", "\n", "# Construct DataFrame\n", - "gene_exp_df = pd.DataFrame({\n", - " \"Sample_ID\": sample_ids,\n", - " \"Treatment\": treatment_assignments,\n", - " \"Gene_ID\": gene_ids,\n", - " \"Expression\": expr\n", - "})" + "gene_exp_df = pd.DataFrame(\n", + " {\n", + " \"Sample_ID\": sample_ids,\n", + " \"Treatment\": treatment_assignments,\n", + " \"Gene_ID\": gene_ids,\n", + " \"Expression\": expr,\n", + " }\n", + ")\n", + "gene_exp_df" ] }, { "cell_type": "markdown", - "id": "ade445fe", + "id": "647549ee", "metadata": {}, "source": [ "## 1. Basic Box Plot\n", - "A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`." + "A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", + "along with style options like `title` \n", + "using [`create_box_plot`](vuecore.plots.basic.box.create_box_plot)." ] }, { "cell_type": "code", "execution_count": null, - "id": "d0d34455", + "id": "4683f13b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/box_plot_basic.png\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define output file path for the PNG basic box plot\n", "file_path_basic_box_png = Path(output_dir) / \"box_plot_basic.png\"\n", @@ -4153,7 +219,7 @@ }, { "cell_type": "markdown", - "id": "727d4fff", + "id": "00c967e1", "metadata": {}, "source": [ "## 2. Basic Violin Plot\n", @@ -4163,50 +229,9 @@ { "cell_type": "code", "execution_count": null, - "id": "42c4e79f", + "id": "ea28fd6b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/violin_plot_basic.png\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define output file path for the PNG basic violin plot\n", "file_path_basic_violin_png = Path(output_dir) / \"violin_plot_basic.png\"\n", @@ -4225,7 +250,7 @@ }, { "cell_type": "markdown", - "id": "f5e16637", + "id": "7057277b", "metadata": {}, "source": [ "## 3. Advanced Box Plot\n", @@ -4235,50 +260,9 @@ { "cell_type": "code", "execution_count": null, - "id": "358e45fe", + "id": "431b287d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/box_plot_advanced.html\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define the output file path for the advanced HTML box plot\n", "file_path_adv_box_html = Path(output_dir) / \"box_plot_advanced.html\"\n", @@ -4314,7 +298,7 @@ }, { "cell_type": "markdown", - "id": "ae75b950", + "id": "79698c71", "metadata": {}, "source": [ "## 4. Advanced Violin Plot\n", @@ -4323,51 +307,10 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "e03b8b67", + "execution_count": null, + "id": "912ebc42", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[VueCore] Plot saved to outputs/violin_plot_advanced.html\n" - ] - }, - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Define the output file path for the advanced HTML violin plot\n", "file_path_adv_violin_html = Path(output_dir) / \"violin_plot_advanced.html\"\n", @@ -4407,18 +350,6 @@ "display_name": "vuecore-dev", "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.12.11" } }, "nbformat": 4, From 23e6ad9b5df83498fb346507e78aab0e6beeb95e Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:47:41 +0200 Subject: [PATCH 06/11] :art: format --- docs/api_examples/bar_plot.ipynb | 4 +-- docs/api_examples/bar_plot.py | 4 +-- docs/api_examples/box_violin_plot.ipynb | 8 +++-- docs/api_examples/box_violin_plot.py | 8 +++-- docs/api_examples/histogram_plot.ipynb | 39 +++++++++++++------------ docs/api_examples/scatter_plot.ipynb | 4 +-- docs/api_examples/scatter_plot.py | 4 +-- 7 files changed, 38 insertions(+), 33 deletions(-) diff --git a/docs/api_examples/bar_plot.ipynb b/docs/api_examples/bar_plot.ipynb index bb068a0..e5fcc75 100644 --- a/docs/api_examples/bar_plot.ipynb +++ b/docs/api_examples/bar_plot.ipynb @@ -212,8 +212,8 @@ "metadata": {}, "source": [ "## 1. Basic Bar Plot\n", - "A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, \n", - "along with style options like `title` \n", + "A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", + "along with style options like `title`\n", "using [`create_bar_plot`](vuecore.plots.basic.bar.create_bar_plot)." ] }, diff --git a/docs/api_examples/bar_plot.py b/docs/api_examples/bar_plot.py index 7976808..751e288 100644 --- a/docs/api_examples/bar_plot.py +++ b/docs/api_examples/bar_plot.py @@ -155,8 +155,8 @@ def make_sample(sample: str, genera: list[str]) -> list[dict]: # %% [markdown] # ## 1. Basic Bar Plot -# A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, -# along with style options like `title` +# A basic bar plot can be created by simply providing the `x` and `y` columns from the DataFrame, +# along with style options like `title` # using [`create_bar_plot`](vuecore.plots.basic.bar.create_bar_plot). # %% diff --git a/docs/api_examples/box_violin_plot.ipynb b/docs/api_examples/box_violin_plot.ipynb index 4934ccc..b13b51c 100644 --- a/docs/api_examples/box_violin_plot.ipynb +++ b/docs/api_examples/box_violin_plot.ipynb @@ -111,10 +111,10 @@ "outputs": [], "source": [ "from pathlib import Path\n", - "import plotly.io as pio\n", "\n", "import numpy as np\n", "import pandas as pd\n", + "import plotly.io as pio\n", "\n", "from vuecore.plots.basic.box import create_box_plot\n", "from vuecore.plots.basic.violin import create_violin_plot\n", @@ -129,7 +129,9 @@ "metadata": {}, "source": [ "### 0.3. Create sample data\n", - "We create a synthetic dataset simulating gene expression levels across different patient samples and treatment conditions, with each data point representing a unique gene's expression level under a specific treatment for a particular patient." + "We create a synthetic dataset simulating gene expression levels across different \n", + "patient samples and treatment conditions, with each data point representing a \n", + "unique gene's expression level under a specific treatment for a particular patient." ] }, { @@ -191,7 +193,7 @@ "source": [ "## 1. Basic Box Plot\n", "A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", - "along with style options like `title` \n", + "along with style options like `title`\n", "using [`create_box_plot`](vuecore.plots.basic.box.create_box_plot)." ] }, diff --git a/docs/api_examples/box_violin_plot.py b/docs/api_examples/box_violin_plot.py index fa26464..bc04285 100644 --- a/docs/api_examples/box_violin_plot.py +++ b/docs/api_examples/box_violin_plot.py @@ -72,10 +72,10 @@ # ### 0.2. Importing libraries # %% from pathlib import Path -import plotly.io as pio import numpy as np import pandas as pd +import plotly.io as pio from vuecore.plots.basic.box import create_box_plot from vuecore.plots.basic.violin import create_violin_plot @@ -85,7 +85,9 @@ # %% [markdown] # ### 0.3. Create sample data -# We create a synthetic dataset simulating gene expression levels across different patient samples and treatment conditions, with each data point representing a unique gene's expression level under a specific treatment for a particular patient. +# We create a synthetic dataset simulating gene expression levels across different +# patient samples and treatment conditions, with each data point representing a +# unique gene's expression level under a specific treatment for a particular patient. # %% tags=["hide-input"] # Set a random seed for reproducibility of the synthetic data @@ -131,7 +133,7 @@ # %% [markdown] # ## 1. Basic Box Plot # A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame, -# along with style options like `title` +# along with style options like `title` # using [`create_box_plot`](vuecore.plots.basic.box.create_box_plot). # %% diff --git a/docs/api_examples/histogram_plot.ipynb b/docs/api_examples/histogram_plot.ipynb index df0e5d0..3f89cd5 100644 --- a/docs/api_examples/histogram_plot.ipynb +++ b/docs/api_examples/histogram_plot.ipynb @@ -222,29 +222,33 @@ } ], "source": [ - "# Set a random seed for reproducibility of the synthetic data \n", + "# Set a random seed for reproducibility of the synthetic data\n", "np.random.seed(42)\n", "\n", "# Define parameters for synthetic gene expression data\n", "num_genes = 1000\n", + "conditions = [\"Control\", \"Treated\"]\n", "gene_names = [f\"Gene_{i}\" for i in range(num_genes)]\n", "\n", "# Simulate expression data with a slight shift in the \"Treated\" group\n", - "expression_values = np.concatenate([\n", - " np.random.normal(loc=10, scale=2, size=num_genes // 2),\n", - " np.random.normal(loc=12, scale=2, size=num_genes // 2)\n", - "])\n", - "condition_values = np.concatenate([\n", - " [\"Control\"] * (num_genes // 2),\n", - " [\"Treated\"] * (num_genes // 2)\n", - "])\n", + "expression_values = np.concatenate(\n", + " [\n", + " np.random.normal(loc=10, scale=2, size=num_genes // 2),\n", + " np.random.normal(loc=12, scale=2, size=num_genes // 2),\n", + " ]\n", + ")\n", + "condition_values = np.concatenate(\n", + " [[\"Control\"] * (num_genes // 2), [\"Treated\"] * (num_genes // 2)]\n", + ")\n", "\n", "# Create the DataFrame\n", - "gene_exp_df = pd.DataFrame({\n", - " \"Gene_ID\": gene_names,\n", - " \"Expression\": expression_values,\n", - " \"Condition\": condition_values\n", - "})\n", + "gene_exp_df = pd.DataFrame(\n", + " {\n", + " \"Gene_ID\": gene_names,\n", + " \"Expression\": expression_values,\n", + " \"Condition\": condition_values,\n", + " }\n", + ")\n", "\n", "gene_exp_df.head()" ] @@ -4281,12 +4285,9 @@ " histnorm=\"probability density\",\n", " title=\"Gene Expression Distribution by Treatment Condition\",\n", " subtitle=\"Histogram with probability density normalized\",\n", - " labels={\n", - " \"Expression\": \"Gene Expression\",\n", - " \"Condition\": \"Treatment Condition\"\n", - " },\n", + " labels={\"Expression\": \"Gene Expression\", \"Condition\": \"Treatment Condition\"},\n", " hover_data=[\"Gene_ID\"],\n", - " opacity=0.75, \n", + " opacity=0.75,\n", " file_path=file_path_adv_hist_html,\n", ")\n", "\n", diff --git a/docs/api_examples/scatter_plot.ipynb b/docs/api_examples/scatter_plot.ipynb index e530c6c..a8d5fba 100644 --- a/docs/api_examples/scatter_plot.ipynb +++ b/docs/api_examples/scatter_plot.ipynb @@ -437,8 +437,8 @@ "metadata": {}, "source": [ "## 1. Basic Scatter Plot\n", - "A basic scatter plot can be created by providing the `x` and `y` columns \n", - "from the DataFrame, along with style options like `title` \n", + "A basic scatter plot can be created by providing the `x` and `y` columns\n", + "from the DataFrame, along with style options like `title`\n", "using [`create_scatter_plot`](vuecore.plots.basic.scatter.create_scatter_plot)." ] }, diff --git a/docs/api_examples/scatter_plot.py b/docs/api_examples/scatter_plot.py index 089942e..35abeec 100644 --- a/docs/api_examples/scatter_plot.py +++ b/docs/api_examples/scatter_plot.py @@ -108,8 +108,8 @@ # %% [markdown] # ## 1. Basic Scatter Plot -# A basic scatter plot can be created by providing the `x` and `y` columns -# from the DataFrame, along with style options like `title` +# A basic scatter plot can be created by providing the `x` and `y` columns +# from the DataFrame, along with style options like `title` # using [`create_scatter_plot`](vuecore.plots.basic.scatter.create_scatter_plot). # %% From 47defa7f7093e8ae9343f4d4ef9feae7c4bc7c6e Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:47:55 +0200 Subject: [PATCH 07/11] :fire: duplicate notebook --- docs/api_examples/box_plot.ipynb | 283 ------------------------------- 1 file changed, 283 deletions(-) delete mode 100644 docs/api_examples/box_plot.ipynb diff --git a/docs/api_examples/box_plot.ipynb b/docs/api_examples/box_plot.ipynb deleted file mode 100644 index 3878c3d..0000000 --- a/docs/api_examples/box_plot.ipynb +++ /dev/null @@ -1,283 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "640ba1d5", - "metadata": {}, - "source": [ - "# Box Plot\n", - "\n", - "![VueCore logo][vuecore_logo]\n", - "\n", - "[![Open In Colab][colab_badge]][colab_link]\n", - "\n", - "[VueCore][vuecore_repo] is a Python package for creating interactive and static visualizations of multi-omics data.\n", - "It is part of a broader ecosystem of tools—including [ACore][acore_repo] for data processing and [VueGen][vuegen_repo] for automated reporting—that together enable end-to-end workflows for omics analysis.\n", - "\n", - "This notebook demonstrates how to generate box plots using plotting functions from VueCore. We showcase basic and advanced plot configurations, highlighting key customization options such as grouping, color mapping, text annotations, and export to multiple file formats.\n", - "\n", - "## Notebook structure\n", - "\n", - "First, we will set up the work environment by installing the necessary packages and importing the required libraries. Next, we will create basic and advanced box plots.\n", - "\n", - "0. [Work environment setup](#0-work-environment-setup)\n", - "1. [Basic box plot](#1-basic-box-plot)\n", - "2. [Advanced box plot](#2-advanced-box-plot)\n", - "\n", - "## Credits and Contributors\n", - "- This notebook was created by Sebastián Ayala-Ruano under the supervision of Henry Webel and Alberto Santos, head of the [Multiomics Network Analytics Group (MoNA)][Mona] at the [Novo Nordisk Foundation Center for Biosustainability (DTU Biosustain)][Biosustain].\n", - "- You can find more details about the project in this [GitHub repository][vuecore_repo].\n", - "\n", - "[colab_badge]: https://colab.research.google.com/assets/colab-badge.svg\n", - "[colab_link]: https://colab.research.google.com/github/Multiomics-Analytics-Group/vuecore/blob/main/docs/api_examples/box_plot.ipynb\n", - "[vuecore_logo]: https://raw.githubusercontent.com/Multiomics-Analytics-Group/vuecore/main/docs/images/logo/vuecore_logo.svg\n", - "[Mona]: https://multiomics-analytics-group.github.io/\n", - "[Biosustain]: https://www.biosustain.dtu.dk/\n", - "[vuecore_repo]: https://github.com/Multiomics-Analytics-Group/vuecore\n", - "[vuegen_repo]: https://github.com/Multiomics-Analytics-Group/vuegen\n", - "[acore_repo]: https://github.com/Multiomics-Analytics-Group/acore" - ] - }, - { - "cell_type": "markdown", - "id": "3b504dfb", - "metadata": {}, - "source": [ - "## 0. Work environment setup" - ] - }, - { - "cell_type": "markdown", - "id": "f0c056a7", - "metadata": {}, - "source": [ - "### 0.1. Installing libraries and creating global variables for platform and working directory\n", - "\n", - "To run this notebook locally, you should create a virtual environment with the required libraries. If you are running this notebook on Google Colab, everything should be set." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "36246ed6", - "metadata": { - "tags": [ - "hide-output" - ] - }, - "outputs": [], - "source": [ - "# VueCore library\n", - "%pip install vuecore" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "963a9529", - "metadata": { - "tags": [ - "hide-cell" - ] - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "IN_COLAB = \"COLAB_GPU\" in os.environ\n", - "\n", - "# Create a directory for outputs\n", - "output_dir = \"./outputs\"\n", - "os.makedirs(output_dir, exist_ok=True)" - ] - }, - { - "cell_type": "markdown", - "id": "31638f9a", - "metadata": { - "lines_to_next_cell": 0 - }, - "source": [ - "### 0.2. Importing libraries" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "06dbf6a2", - "metadata": {}, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "from vuecore.plots.basic.box import create_box_plot" - ] - }, - { - "cell_type": "markdown", - "id": "5cc60050", - "metadata": {}, - "source": [ - "### 0.3. Create sample data\n", - "We create a synthetic dataset simulating gene expression levels across different patient samples and treatment conditions, with each data point representing a unique gene's expression level under a specific treatment for a particular patient." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ac2db647", - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [], - "source": [ - "# Set a random seed for reproducibility of the synthetic data\n", - "np.random.seed(42)\n", - "\n", - "# Parameters\n", - "num_samples = 200\n", - "sample_groups = [\"Patient A\", \"Patient B\", \"Patient C\", \"Patient D\"]\n", - "treatments = [\"Control\", \"Treated\"]\n", - "\n", - "# Sample metadata\n", - "sample_ids = np.random.choice(sample_groups, size=num_samples)\n", - "treatment_assignments = np.random.choice(treatments, size=num_samples)\n", - "gene_ids = [f\"Gene_{g}\" for g in np.random.randint(1, 1500, size=num_samples)]\n", - "\n", - "# Base expression values\n", - "base_expr = np.random.normal(loc=100, scale=35, size=num_samples)\n", - "\n", - "# Treatment effect simulation\n", - "treatment_effect = np.where(\n", - " treatment_assignments == \"Treated\",\n", - " np.random.normal(loc=50, scale=30, size=num_samples),\n", - " 0,\n", - ")\n", - "\n", - "# Small random per-gene offset for extra variability\n", - "gene_offset = np.random.normal(loc=0, scale=20, size=num_samples)\n", - "\n", - "# Final expression\n", - "expr = base_expr + treatment_effect + gene_offset\n", - "\n", - "# Construct DataFrame\n", - "gene_exp_df = pd.DataFrame(\n", - " {\n", - " \"Sample_ID\": sample_ids,\n", - " \"Treatment\": treatment_assignments,\n", - " \"Gene_ID\": gene_ids,\n", - " \"Expression\": expr,\n", - " }\n", - ")\n", - "gene_exp_df" - ] - }, - { - "cell_type": "markdown", - "id": "ade445fe", - "metadata": {}, - "source": [ - "## 1. Basic Box Plot\n", - "A basic box plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", - "along with style options like `title` \n", - "using [`create_box_plot`](vuecore.plots.basic.box.create_box_plot)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d0d34455", - "metadata": {}, - "outputs": [], - "source": [ - "# Define output file path for the PNG plot\n", - "file_path_basic_png = Path(output_dir) / \"box_plot_basic.png\"\n", - "\n", - "# Generate the basic box plot\n", - "box_plot_basic = create_box_plot(\n", - " data=gene_exp_df,\n", - " x=\"Treatment\",\n", - " y=\"Expression\",\n", - " title=\"Gene Expression Levels by Treatment\",\n", - " file_path=file_path_basic_png,\n", - ")\n", - "\n", - "box_plot_basic.show()" - ] - }, - { - "cell_type": "markdown", - "id": "f5e16637", - "metadata": {}, - "source": [ - "## 2. Advanced Box Plot\n", - "Here is an example of an advanced box plot with more descriptive parameters, including `color and box grouping`, `text annotations`, `hover tooltips`, and export to `HTML`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "358e45fe", - "metadata": {}, - "outputs": [], - "source": [ - "# Define the output file path for the advanced HTML plot\n", - "file_path_adv_html = Path(output_dir) / \"box_plot_advanced.html\"\n", - "\n", - "# Generate the advanced box plot\n", - "box_plot_adv = create_box_plot(\n", - " data=gene_exp_df,\n", - " x=\"Treatment\",\n", - " y=\"Expression\",\n", - " color=\"Sample_ID\",\n", - " boxmode=\"group\",\n", - " notched=True,\n", - " title=\"Gene Expression Levels with Control and Treatment Condition\",\n", - " subtitle=\"Distribution of gene expression across different treatments and patient samples\",\n", - " labels={\n", - " \"Treatment\": \"Treatment\",\n", - " \"Expression\": \"Gene Expression\",\n", - " \"Sample_ID\": \"Patient Sample ID\",\n", - " },\n", - " color_discrete_map={\n", - " \"Patient A\": \"#508AA8\",\n", - " \"Patient B\": \"#A8505E\",\n", - " \"Patient C\": \"#86BF84\",\n", - " \"Patient D\": \"#A776AF\",\n", - " },\n", - " category_orders={\"Sample_ID\": [\"Patient A\", \"Patient B\", \"Patient C\", \"Patient D\"]},\n", - " hover_data=[\"Gene_ID\"],\n", - " file_path=file_path_adv_html,\n", - ")\n", - "\n", - "box_plot_adv.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vuecore-dev", - "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.12.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 400dd444a06103f338a7dde7a22230f57638c648 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:55:19 +0200 Subject: [PATCH 08/11] :wrench: move config for sphinx to conf.py - avoid having it in notebooks --- docs/api_examples/box_violin_plot.ipynb | 6 +----- docs/api_examples/box_violin_plot.py | 4 ---- docs/api_examples/histogram_plot.ipynb | 9 +++------ docs/api_examples/histogram_plot.py | 9 +++------ docs/conf.py | 10 +++++----- 5 files changed, 12 insertions(+), 26 deletions(-) diff --git a/docs/api_examples/box_violin_plot.ipynb b/docs/api_examples/box_violin_plot.ipynb index b13b51c..d5648aa 100644 --- a/docs/api_examples/box_violin_plot.ipynb +++ b/docs/api_examples/box_violin_plot.ipynb @@ -114,13 +114,9 @@ "\n", "import numpy as np\n", "import pandas as pd\n", - "import plotly.io as pio\n", "\n", "from vuecore.plots.basic.box import create_box_plot\n", - "from vuecore.plots.basic.violin import create_violin_plot\n", - "\n", - "# Set the Plotly renderer based on the environment\n", - "pio.renderers.default = \"notebook\"" + "from vuecore.plots.basic.violin import create_violin_plot" ] }, { diff --git a/docs/api_examples/box_violin_plot.py b/docs/api_examples/box_violin_plot.py index bc04285..aa21c74 100644 --- a/docs/api_examples/box_violin_plot.py +++ b/docs/api_examples/box_violin_plot.py @@ -75,14 +75,10 @@ import numpy as np import pandas as pd -import plotly.io as pio from vuecore.plots.basic.box import create_box_plot from vuecore.plots.basic.violin import create_violin_plot -# Set the Plotly renderer based on the environment -pio.renderers.default = "notebook" - # %% [markdown] # ### 0.3. Create sample data # We create a synthetic dataset simulating gene expression levels across different diff --git a/docs/api_examples/histogram_plot.ipynb b/docs/api_examples/histogram_plot.ipynb index 3f89cd5..73925b9 100644 --- a/docs/api_examples/histogram_plot.ipynb +++ b/docs/api_examples/histogram_plot.ipynb @@ -120,15 +120,12 @@ "outputs": [], "source": [ "# Imports\n", - "import pandas as pd\n", - "import numpy as np\n", "from pathlib import Path\n", - "import plotly.io as pio\n", "\n", - "from vuecore.plots.basic.histogram import create_histogram_plot\n", + "import numpy as np\n", + "import pandas as pd\n", "\n", - "# Set the Plotly renderer based on the environment\n", - "pio.renderers.default = \"notebook\"" + "from vuecore.plots.basic.histogram import create_histogram_plot" ] }, { diff --git a/docs/api_examples/histogram_plot.py b/docs/api_examples/histogram_plot.py index 45de99a..7d3ebec 100644 --- a/docs/api_examples/histogram_plot.py +++ b/docs/api_examples/histogram_plot.py @@ -73,15 +73,12 @@ # %% # Imports -import pandas as pd -import numpy as np from pathlib import Path -import plotly.io as pio -from vuecore.plots.basic.histogram import create_histogram_plot +import numpy as np +import pandas as pd -# Set the Plotly renderer based on the environment -pio.renderers.default = "notebook" +from vuecore.plots.basic.histogram import create_histogram_plot # %% [markdown] # ### 0.3. Create sample data diff --git a/docs/conf.py b/docs/conf.py index 8d60193..ae0a710 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -59,6 +59,11 @@ # https://myst-nb.readthedocs.io/en/latest/render/interactive.html#plotly # html_js_files = [ # ] +# Set the Plotly renderer to notebook for ReadTheDocs (visualize plotly figures +# in the documentation) - needed for plotly6 +# Plotly normally decides itself fine which renderer to use, so keep it to Sphinx +# see https://plotly.com/python/renderers/#setting-the-default-renderer +os.environ["PLOTLY_RENDERER"] = "notebook" # https://myst-nb.readthedocs.io/en/latest/configuration.html # Execution @@ -164,11 +169,6 @@ # https://github.com/readthedocs/readthedocs.org/issues/1139 if os.environ.get("READTHEDOCS") == "True": - # Set the Plotly renderer to notebook for ReadTheDocs (visualize plotly figures - # in the documentation) - needed for plotly6 - # Plotly normally decides itself fine which renderer to use, so keep it to RTD - # see https://plotly.com/python/renderers/#setting-the-default-renderer - os.environ["PLOTLY_RENDERER"] = "notebook" PROJECT_ROOT = Path(__file__).parent.parent PACKAGE_ROOT = PROJECT_ROOT / "src" / "vuecore" From 05c05b218defc94af81b027e0d8a3098430f4b40 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:56:10 +0200 Subject: [PATCH 09/11] :art: format --- docs/api_examples/box_violin_plot.ipynb | 4 ++-- docs/api_examples/box_violin_plot.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api_examples/box_violin_plot.ipynb b/docs/api_examples/box_violin_plot.ipynb index d5648aa..d914e08 100644 --- a/docs/api_examples/box_violin_plot.ipynb +++ b/docs/api_examples/box_violin_plot.ipynb @@ -125,8 +125,8 @@ "metadata": {}, "source": [ "### 0.3. Create sample data\n", - "We create a synthetic dataset simulating gene expression levels across different \n", - "patient samples and treatment conditions, with each data point representing a \n", + "We create a synthetic dataset simulating gene expression levels across different\n", + "patient samples and treatment conditions, with each data point representing a\n", "unique gene's expression level under a specific treatment for a particular patient." ] }, diff --git a/docs/api_examples/box_violin_plot.py b/docs/api_examples/box_violin_plot.py index aa21c74..40f010e 100644 --- a/docs/api_examples/box_violin_plot.py +++ b/docs/api_examples/box_violin_plot.py @@ -81,8 +81,8 @@ # %% [markdown] # ### 0.3. Create sample data -# We create a synthetic dataset simulating gene expression levels across different -# patient samples and treatment conditions, with each data point representing a +# We create a synthetic dataset simulating gene expression levels across different +# patient samples and treatment conditions, with each data point representing a # unique gene's expression level under a specific treatment for a particular patient. # %% tags=["hide-input"] From f4c1cecd1300d900b568df6d78a323a867aff112 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 15:59:12 +0200 Subject: [PATCH 10/11] :art: hide input in histogram api example --- docs/api_examples/histogram_plot.ipynb | 6 +++++- docs/api_examples/histogram_plot.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/api_examples/histogram_plot.ipynb b/docs/api_examples/histogram_plot.ipynb index 73925b9..a6b9170 100644 --- a/docs/api_examples/histogram_plot.ipynb +++ b/docs/api_examples/histogram_plot.ipynb @@ -141,7 +141,11 @@ "cell_type": "code", "execution_count": null, "id": "ac2db647", - "metadata": {}, + "metadata": { + "tags": [ + "hide-input" + ] + }, "outputs": [ { "data": { diff --git a/docs/api_examples/histogram_plot.py b/docs/api_examples/histogram_plot.py index 7d3ebec..f96bba8 100644 --- a/docs/api_examples/histogram_plot.py +++ b/docs/api_examples/histogram_plot.py @@ -84,7 +84,7 @@ # ### 0.3. Create sample data # We create a synthetic dataset simulating gene expression data across two experimental conditions to demonstrate how histograms can visualize data distribution. -# %% +# %% tags=["hide-input"] # Set a random seed for reproducibility of the synthetic data np.random.seed(42) From 37658b62345015b53c7ebe733c1b229010dd25ce Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Thu, 18 Sep 2025 16:14:31 +0200 Subject: [PATCH 11/11] :art: link API Reference of new create functions --- docs/api_examples/box_violin_plot.ipynb | 4 +++- docs/api_examples/box_violin_plot.py | 4 +++- docs/api_examples/histogram_plot.ipynb | 7 +++++-- docs/api_examples/histogram_plot.py | 7 +++++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/api_examples/box_violin_plot.ipynb b/docs/api_examples/box_violin_plot.ipynb index d914e08..8b8ff5d 100644 --- a/docs/api_examples/box_violin_plot.ipynb +++ b/docs/api_examples/box_violin_plot.ipynb @@ -221,7 +221,9 @@ "metadata": {}, "source": [ "## 2. Basic Violin Plot\n", - "A basic violin plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`." + "A basic violin plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", + "along with style options like `title`\n", + "using [`create_violin_plot`](vuecore.plots.basic.violin.create_violin_plot) ." ] }, { diff --git a/docs/api_examples/box_violin_plot.py b/docs/api_examples/box_violin_plot.py index 40f010e..6deda49 100644 --- a/docs/api_examples/box_violin_plot.py +++ b/docs/api_examples/box_violin_plot.py @@ -149,7 +149,9 @@ # %% [markdown] # ## 2. Basic Violin Plot -# A basic violin plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`. +# A basic violin plot can be created by simply providing the `x` and `y` columns from the DataFrame, +# along with style options like `title` +# using [`create_violin_plot`](vuecore.plots.basic.violin.create_violin_plot) . # %% # Define output file path for the PNG basic violin plot diff --git a/docs/api_examples/histogram_plot.ipynb b/docs/api_examples/histogram_plot.ipynb index a6b9170..d7c7a26 100644 --- a/docs/api_examples/histogram_plot.ipynb +++ b/docs/api_examples/histogram_plot.ipynb @@ -134,7 +134,8 @@ "metadata": {}, "source": [ "### 0.3. Create sample data\n", - "We create a synthetic dataset simulating gene expression data across two experimental conditions to demonstrate how histograms can visualize data distribution." + "We create a synthetic dataset simulating gene expression data across two experimental\n", + "conditions to demonstrate how histograms can visualize data distribution." ] }, { @@ -260,7 +261,9 @@ "metadata": {}, "source": [ "## 1. Basic Histogram Plot\n", - "A basic histogram plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`." + "A basic histogram plot can be created by simply providing the `x` and `y` columns from the DataFrame,\n", + "along with style options like `title`\n", + "using [`create_histogram_plot`](vuecore.plots.basic.histogram.create_histogram_plot) ." ] }, { diff --git a/docs/api_examples/histogram_plot.py b/docs/api_examples/histogram_plot.py index f96bba8..f6d5b92 100644 --- a/docs/api_examples/histogram_plot.py +++ b/docs/api_examples/histogram_plot.py @@ -82,7 +82,8 @@ # %% [markdown] # ### 0.3. Create sample data -# We create a synthetic dataset simulating gene expression data across two experimental conditions to demonstrate how histograms can visualize data distribution. +# We create a synthetic dataset simulating gene expression data across two experimental +# conditions to demonstrate how histograms can visualize data distribution. # %% tags=["hide-input"] # Set a random seed for reproducibility of the synthetic data @@ -117,7 +118,9 @@ # %% [markdown] # ## 1. Basic Histogram Plot -# A basic histogram plot can be created by simply providing the `x` and `y` columns from the DataFrame, along with style options like `title`. +# A basic histogram plot can be created by simply providing the `x` and `y` columns from the DataFrame, +# along with style options like `title` +# using [`create_histogram_plot`](vuecore.plots.basic.histogram.create_histogram_plot) . # %% # Define output file path for the PNG basic histogram