{ "cells": [ { "cell_type": "markdown", "id": "989a5fa8", "metadata": {}, "source": [ "# oggmap: Step 2 - gene age class assignment\n", "\n", "This notebook will demonstrate how to extract an orthomap (gene age class) from [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results or how to import pre-calculated orthomaps." ] }, { "cell_type": "markdown", "id": "6e3c6084", "metadata": {}, "source": [ "## Notebook file\n", "\n", "Notebook file can be obtained here:\n", "\n", "[https://raw.githubusercontent.com/kullrich/oggmap/main/docs/notebooks/get_orthomap.ipynb](https://raw.githubusercontent.com/kullrich/oggmap/main/docs/notebooks/get_orthomap.ipynb)" ] }, { "cell_type": "markdown", "id": "c2a60baf", "metadata": {}, "source": [ "## Import libraries" ] }, { "cell_type": "code", "execution_count": 1, "id": "7b0cd487", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import scanpy as sc\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from statannot import add_stat_annotation\n", "# increase dpi\n", "%matplotlib inline\n", "#plt.rcParams['figure.dpi'] = 300\n", "#plt.rcParams['savefig.dpi'] = 300\n", "plt.rcParams['figure.figsize'] = [6, 4.5]\n", "#plt.rcParams['figure.figsize'] = [4.4, 3.3]" ] }, { "cell_type": "markdown", "id": "d840912f", "metadata": {}, "source": [ "## Import oggmap python package submodules" ] }, { "cell_type": "code", "execution_count": 2, "id": "04cfd2b9", "metadata": {}, "outputs": [], "source": [ "# import submodules\n", "from oggmap import qlin, gtf2t2g, of2orthomap, orthomap2tei, datasets" ] }, { "cell_type": "markdown", "id": "492b36a6", "metadata": {}, "source": [ "## Use OrthoFinder results to get gene age classification" ] }, { "cell_type": "markdown", "id": "d29bf9e2", "metadata": {}, "source": [ "The query species in this part is: __*Danio rerio*__ (zebrafish).\n", "\n", "Please have a look at the documentation of [Step 0 - run OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/orthofinder.html) to get to know what information and files are mandatory to extract gene age classes from [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results.\n", "\n", "__Mandatory query species information:__\n", "\n", "- query species sequence name (see header of or file) (`seqname=`)\n", "- query species taxonomic ID (`qt=`)\n", "\n", "__Mandatory information from [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) run:__\n", "\n", "- tab delimted file containing sequence name and taxonomic IDs of all species used (``) (`sl=`)\n", "\n", "__Mandatory files from [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder):__\n", "\n", "- or (`oc=`)\n", "- or (`og=`)\n", "\n", "In [Step 1 - get taxonomic information](https://oggmap.readthedocs.io/en/latest/tutorials/query_lineage.html) you have already been introduced how to extract query lineage information with `oggmap` and the `qlin.get_qlin()` function." ] }, { "cell_type": "code", "execution_count": 3, "id": "bed83044", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "query name: Danio rerio\n", "query taxID: 7955\n", "query kingdom: Eukaryota\n", "query lineage names: \n", "['root(1)', 'cellular organisms(131567)', 'Eukaryota(2759)', 'Opisthokonta(33154)', 'Metazoa(33208)', 'Eumetazoa(6072)', 'Bilateria(33213)', 'Deuterostomia(33511)', 'Chordata(7711)', 'Craniata(89593)', 'Vertebrata(7742)', 'Gnathostomata(7776)', 'Teleostomi(117570)', 'Euteleostomi(117571)', 'Actinopterygii(7898)', 'Actinopteri(186623)', 'Neopterygii(41665)', 'Teleostei(32443)', 'Osteoglossocephalai(1489341)', 'Clupeocephala(186625)', 'Otomorpha(186634)', 'Ostariophysi(32519)', 'Otophysi(186626)', 'Cypriniphysae(186627)', 'Cypriniformes(7952)', 'Cyprinoidei(30727)', 'Danionidae(2743709)', 'Danioninae(2743711)', 'Danio(7954)', 'Danio rerio(7955)']\n", "query lineage: \n", "[1, 131567, 2759, 33154, 33208, 6072, 33213, 33511, 7711, 89593, 7742, 7776, 117570, 117571, 7898, 186623, 41665, 32443, 1489341, 186625, 186634, 32519, 186626, 186627, 7952, 30727, 2743709, 2743711, 7954, 7955]\n" ] } ], "source": [ "# get query species taxonomic lineage information\n", "query_lineage = qlin.get_qlin(q='Danio rerio')" ] }, { "cell_type": "markdown", "id": "eb294245", "metadata": {}, "source": [ "## Ensembl release-105\n", "\n", "For this documentation part all mandatory [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) ([Emms and Kelly, 2019](https://doi.org/10.1186/s13059-019-1832-y)) results have been pre-calculated. \n", "\n", "[OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) was run with the option `-S diamond_ultra_sens` using translated, longest-isoform coding sequences (CDS) from [Ensembl release-105](https://ftp.ensembl.org/pub/release-105/) including species taxonomic IDs.\n", "\n", "The results are available here: \n", "\n", "https://doi.org/10.5281/zenodo.7242264\n", "\n", "or can be accessed with the `dataset` submodule of `oggmap`\n", "\n", "`datasets.ensembl105(datapath='data')` (download folder set to `'data'`).\n", "\n", "__Note:__ If you want to use your own [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results, please have a look at the documentation of [Step 0 - run OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/orthofinder.html)." ] }, { "cell_type": "code", "execution_count": 4, "id": "c4ba3fb0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100% [..............................................................................] 15662 / 15662" ] }, { "data": { "text/plain": [ "['data/ensembl_105_orthofinder_Orthogroups.GeneCount.tsv.zip',\n", " 'data/ensembl_105_orthofinder_Orthogroups.tsv.zip',\n", " 'data/ensembl_105_orthofinder_species_list.tsv']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datasets.ensembl105(datapath='data')" ] }, { "cell_type": "markdown", "id": "3a998c1b", "metadata": {}, "source": [ "Here, `oggmap` use the query species information and [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results to extract the oldest common tree node per orthogroup along a species tree and to assign this node as the gene age to the corresponding genes.\n", "\n", "In a pairwise manner, the query species and any other species in the [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) result might share multiple tree nodes down to the root of the species tree, but have only one youngest tree node in common. Among all possible comparison between the query species and the other species, the oldest as defined by the species tree root is selected and used for the gene age assignment.\n", "\n", "Given the `query species sequence name` (`seqname=`) used in the [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) comparison, the `query species taxonomic ID`(`qt=`), the `taxonomic IDs of all species` from the file (`sl=`) used in the [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) comparison, the `orthogroup gene count` file (`oc=`) results and the `orthogroups` file (`og=`), an orthomap is constructed.\n", "\n", "__Note:__ This step can take up to five minutes, depending on your hardware." ] }, { "cell_type": "markdown", "id": "a0832413", "metadata": {}, "source": [ "For this step to get the query species orthomap, one uses the `of2orthomap.get_orthomap()` function, like:" ] }, { "cell_type": "code", "execution_count": 5, "id": "b1fb7c22", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Danio_rerio.GRCz11.cds.longest\n", "Danio rerio\n", "7955\n", " species taxID \\\n", "0 Acanthochromis_polyacanthus.ASM210954v1.cds.lo... 80966 \n", "1 Accipiter_nisus.Accipiter_nisus_ver1.0.cds.lon... 211598 \n", "2 Ailuropoda_melanoleuca.ASM200744v2.cds.longest 9646 \n", "3 Amazona_collaria.ASM394721v1.cds.longest 241587 \n", "4 Amphilophus_citrinellus.Midas_v5.cds.longest 61819 \n", ".. ... ... \n", "307 Xiphophorus_couchianus.Xiphophorus_couchianus-... 32473 \n", "308 Xiphophorus_maculatus.X_maculatus-5.0-male.cds... 8083 \n", "309 Zalophus_californianus.mZalCal1.pri.cds.longest 9704 \n", "310 Zonotrichia_albicollis.Zonotrichia_albicollis-... 44394 \n", "311 Zosterops_lateralis_melanops.ASM128173v1.cds.l... 1220523 \n", "\n", " lineage youngest_common \\\n", "0 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 186625 \n", "1 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "2 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "3 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "4 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 186625 \n", ".. ... ... \n", "307 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 186625 \n", "308 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 186625 \n", "309 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "310 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "311 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "\n", " youngest_name \n", "0 Clupeocephala \n", "1 Euteleostomi \n", "2 Euteleostomi \n", "3 Euteleostomi \n", "4 Clupeocephala \n", ".. ... \n", "307 Clupeocephala \n", "308 Clupeocephala \n", "309 Euteleostomi \n", "310 Euteleostomi \n", "311 Euteleostomi \n", "\n", "[312 rows x 5 columns]\n" ] }, { "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", " \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", " \n", " \n", " \n", " \n", " \n", "
seqIDOrthogroupPSnumPStaxIDPSnamePScontinuity
0ENSDART00000127643.3OG0000000633213Bilateria0.846154
1ENSDART00000171750.2OG0000000633213Bilateria0.846154
2ENSDART00000190648.1OG0000000633213Bilateria0.846154
3ENSDART00000130167.3OG0000001107742Vertebrata0.909091
4ENSDART00000150909.2OG0000001107742Vertebrata0.909091
.....................
25167ENSDART00000180796.1OG002951019186625Clupeocephala0.400000
25168ENSDART00000145618.2OG002951119186625Clupeocephala0.400000
25169ENSDART00000143229.2OG0029512297955Danio rerio1.000000
25170ENSDART00000143837.3OG0029512297955Danio rerio1.000000
25171ENSDART00000180573.1OG002951313117571Euteleostomi0.222222
\n", "

25172 rows × 6 columns

\n", "
" ], "text/plain": [ " seqID Orthogroup PSnum PStaxID PSname \\\n", "0 ENSDART00000127643.3 OG0000000 6 33213 Bilateria \n", "1 ENSDART00000171750.2 OG0000000 6 33213 Bilateria \n", "2 ENSDART00000190648.1 OG0000000 6 33213 Bilateria \n", "3 ENSDART00000130167.3 OG0000001 10 7742 Vertebrata \n", "4 ENSDART00000150909.2 OG0000001 10 7742 Vertebrata \n", "... ... ... ... ... ... \n", "25167 ENSDART00000180796.1 OG0029510 19 186625 Clupeocephala \n", "25168 ENSDART00000145618.2 OG0029511 19 186625 Clupeocephala \n", "25169 ENSDART00000143229.2 OG0029512 29 7955 Danio rerio \n", "25170 ENSDART00000143837.3 OG0029512 29 7955 Danio rerio \n", "25171 ENSDART00000180573.1 OG0029513 13 117571 Euteleostomi \n", "\n", " PScontinuity \n", "0 0.846154 \n", "1 0.846154 \n", "2 0.846154 \n", "3 0.909091 \n", "4 0.909091 \n", "... ... \n", "25167 0.400000 \n", "25168 0.400000 \n", "25169 1.000000 \n", "25170 1.000000 \n", "25171 0.222222 \n", "\n", "[25172 rows x 6 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get query species orthomap\n", "\n", "# download orthofinder results here: https://doi.org/10.5281/zenodo.7242264\n", "# or download with datasets.ensembl105('data')\n", "query_orthomap, orthofinder_species_list, of_species_abundance = of2orthomap.get_orthomap(\n", " seqname='Danio_rerio.GRCz11.cds.longest',\n", " qt='7955',\n", " sl='data/ensembl_105_orthofinder_species_list.tsv',\n", " oc='data/ensembl_105_orthofinder_Orthogroups.GeneCount.tsv.zip',\n", " og='data/ensembl_105_orthofinder_Orthogroups.tsv.zip',\n", " continuity=True)\n", "query_orthomap" ] }, { "cell_type": "markdown", "id": "9d51b243", "metadata": {}, "source": [ "The created orthomap can be stored as a separated file like:" ] }, { "cell_type": "raw", "id": "92c3da3d", "metadata": {}, "source": [ "query_orthomap.to_csv('./orthomap.tsv', sep='\\t', index=False)" ] }, { "cell_type": "markdown", "id": "243a6f42", "metadata": {}, "source": [ "To re-use the saved orthomap, so that one does not need to repeat step1 and step2, one could load it with `orthomap2tei.read_orthomap()` function." ] }, { "cell_type": "markdown", "id": "894edcaf", "metadata": {}, "source": [ "## Ensembl release-110\n", "\n", "For this documentation part all mandatory [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) ([Emms and Kelly, 2019](https://doi.org/10.1186/s13059-019-1832-y)) results have been pre-calculated. \n", "\n", "[OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) was run with the option `-S last` using translated, longest-isoform coding sequences (CDS) from [Ensembl release-110](https://ftp.ensembl.org/pub/release-110/) including species taxonomic IDs.\n", "\n", "The results are available here: \n", "\n", "https://doi.org/10.5281/zenodo.7242264\n", "\n", "or can be accessed with the `dataset` submodule of `oggmap`\n", "\n", "`datasets.ensembl110_last(datapath='data')` (download folder set to `'data'`).\n", "\n", "__Note:__ If you want to use your own [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results, please have a look at the documentation of [Step 0 - run OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/orthofinder.html)." ] }, { "cell_type": "code", "execution_count": 6, "id": "fca86034", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100% [..............................................................................] 11317 / 11317" ] }, { "data": { "text/plain": [ "['data/ensembl_110_orthofinder_last_Orthogroups.GeneCount.tsv.zip',\n", " 'data/ensembl_110_orthofinder_last_Orthogroups.tsv.zip',\n", " 'data/ensembl_110_orthofinder_last_species_list.tsv']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datasets.ensembl110_last(datapath='data')" ] }, { "cell_type": "code", "execution_count": 7, "id": "30644178", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7955.danio_rerio.pep\n", "Danio rerio\n", "7955\n", " species taxID \\\n", "0 10020.dipodomys_ordii.pep 10020 \n", "1 10029.cricetulus_griseus_chok1gshd.pep 10029 \n", "2 10029.cricetulus_griseus_crigri.pep 10029 \n", "3 10029.cricetulus_griseus_picr.pep 10029 \n", "4 10036.mesocricetus_auratus.pep 10036 \n", ".. ... ... \n", "313 9986.oryctolagus_cuniculus.pep 9986 \n", "314 99883.tetraodon_nigroviridis.pep 99883 \n", "315 9994.marmota_marmota_marmota.pep 9994 \n", "316 9999.urocitellus_parryii.pep 9999 \n", "317 Xtropicalisv9.0.Named.primaryTrs.pep 8364 \n", "\n", " lineage youngest_common \\\n", "0 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "1 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "2 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "3 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "4 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", ".. ... ... \n", "313 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "314 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 186625 \n", "315 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "316 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "317 [1, 131567, 2759, 33154, 33208, 6072, 33213, 3... 117571 \n", "\n", " youngest_name \n", "0 Euteleostomi \n", "1 Euteleostomi \n", "2 Euteleostomi \n", "3 Euteleostomi \n", "4 Euteleostomi \n", ".. ... \n", "313 Euteleostomi \n", "314 Clupeocephala \n", "315 Euteleostomi \n", "316 Euteleostomi \n", "317 Euteleostomi \n", "\n", "[318 rows x 5 columns]\n" ] }, { "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", " \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", " \n", " \n", " \n", " \n", " \n", "
seqIDOrthogroupPSnumPStaxIDPSnamePScontinuity
0ENSDART00000013359.10OG0000000633213Bilateria0.846154
1ENSDART00000136092.3OG0000001633213Bilateria1.000000
2ENSDART00000148349.3OG0000001633213Bilateria1.000000
3ENSDART00000160249.2OG0000001633213Bilateria1.000000
4ENSDART00000174091.2OG0000001633213Bilateria1.000000
.....................
24952ENSDART00000125904.3OG003549219186625Clupeocephala0.400000
24953ENSDART00000191935.1OG00354932530727Cyprinoidei1.000000
24954ENSDART00000143229.2OG0035494297955Danio rerio1.000000
24955ENSDART00000143837.3OG0035494297955Danio rerio1.000000
24956ENSDART00000143384.2OG003549522186626Otophysi0.666667
\n", "

24957 rows × 6 columns

\n", "
" ], "text/plain": [ " seqID Orthogroup PSnum PStaxID PSname \\\n", "0 ENSDART00000013359.10 OG0000000 6 33213 Bilateria \n", "1 ENSDART00000136092.3 OG0000001 6 33213 Bilateria \n", "2 ENSDART00000148349.3 OG0000001 6 33213 Bilateria \n", "3 ENSDART00000160249.2 OG0000001 6 33213 Bilateria \n", "4 ENSDART00000174091.2 OG0000001 6 33213 Bilateria \n", "... ... ... ... ... ... \n", "24952 ENSDART00000125904.3 OG0035492 19 186625 Clupeocephala \n", "24953 ENSDART00000191935.1 OG0035493 25 30727 Cyprinoidei \n", "24954 ENSDART00000143229.2 OG0035494 29 7955 Danio rerio \n", "24955 ENSDART00000143837.3 OG0035494 29 7955 Danio rerio \n", "24956 ENSDART00000143384.2 OG0035495 22 186626 Otophysi \n", "\n", " PScontinuity \n", "0 0.846154 \n", "1 1.000000 \n", "2 1.000000 \n", "3 1.000000 \n", "4 1.000000 \n", "... ... \n", "24952 0.400000 \n", "24953 1.000000 \n", "24954 1.000000 \n", "24955 1.000000 \n", "24956 0.666667 \n", "\n", "[24957 rows x 6 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get query species orthomap\n", "\n", "# download orthofinder results here: https://doi.org/10.5281/zenodo.7242264\n", "# or download with datasets.ensembl105('data')\n", "query_orthomap, orthofinder_species_list, of_species_abundance = of2orthomap.get_orthomap(\n", " seqname='7955.danio_rerio.pep',\n", " qt='7955',\n", " sl='data/ensembl_110_orthofinder_last_species_list.tsv',\n", " oc='data/ensembl_110_orthofinder_last_Orthogroups.GeneCount.tsv.zip',\n", " og='data/ensembl_110_orthofinder_last_Orthogroups.tsv.zip',\n", " continuity=True)\n", "query_orthomap" ] }, { "cell_type": "markdown", "id": "beafa16e", "metadata": {}, "source": [ "The created orthomap can be stored as a separated file like:" ] }, { "cell_type": "raw", "id": "8482f2c3", "metadata": {}, "source": [ "query_orthomap.to_csv('./orthomap.tsv', sep='\\t', index=False)" ] }, { "cell_type": "markdown", "id": "5ae0b7fa", "metadata": {}, "source": [ "To re-use the saved orthomap, so that one does not need to repeat step1 and step2, one could load it with `orthomap2tei.read_orthomap()` function." ] }, { "cell_type": "markdown", "id": "2f8dd158", "metadata": {}, "source": [ "### Gene age assignments per query species lineage node\n", "\n", "Given an orthomap, one can get an overview of the gene age assignments per query species lineage node.\n", "\n", "The `oggmap` submodule `of2orhomap` and the `of2orthomap.get_counts_per_ps()` function will show the distribution of the gene age classes and can be further visualized as follows:" ] }, { "cell_type": "code", "execution_count": 8, "id": "672ae534", "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PSnumcountsPStaxIDPSname
PSnum
33437633154Opisthokonta
661053033213Bilateria
8823907711Chordata
101028387742Vertebrata
111115157776Gnathostomata
1313760117571Euteleostomi
14142357898Actinopterygii
161627541665Neopterygii
18182311489341Osteoglossocephalai
1919506186625Clupeocephala
202033186634Otomorpha
2222120186626Otophysi
252531730727Cyprinoidei
29298317955Danio rerio
\n", "
" ], "text/plain": [ " PSnum counts PStaxID PSname\n", "PSnum \n", "3 3 4376 33154 Opisthokonta\n", "6 6 10530 33213 Bilateria\n", "8 8 2390 7711 Chordata\n", "10 10 2838 7742 Vertebrata\n", "11 11 1515 7776 Gnathostomata\n", "13 13 760 117571 Euteleostomi\n", "14 14 235 7898 Actinopterygii\n", "16 16 275 41665 Neopterygii\n", "18 18 231 1489341 Osteoglossocephalai\n", "19 19 506 186625 Clupeocephala\n", "20 20 33 186634 Otomorpha\n", "22 22 120 186626 Otophysi\n", "25 25 317 30727 Cyprinoidei\n", "29 29 831 7955 Danio rerio" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# show count per taxonomic group (PStaxID)\n", "of2orthomap.get_counts_per_ps(query_orthomap)" ] }, { "cell_type": "markdown", "id": "309e6f3e", "metadata": {}, "source": [ "### Visualize number of species along query lineage and counts per gene age class" ] }, { "cell_type": "code", "execution_count": 9, "id": "9f2feeef", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# show number of species along query lineage\n", "of_species_abundance\n", "\n", "# bar plot number of species along query lineage\n", "of_species_abundance.plot.bar(y='counts', use_index=True)" ] }, { "cell_type": "code", "execution_count": 10, "id": "12c0d65f", "metadata": {}, "outputs": [ { "data": { "image/png": "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iCg5FhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpCgWG0RERKQoFhtERESkKBYbREREpChFio0HDx7gf//7H+zs7GBhYQFvb2+cPHlSe72IYPjw4XB2doa5uTkqV66Mixcv6txHbGwsevbsiezZs8PS0hJ+fn64f/++TpvIyEj4+/vD2toa1tbW8Pf3R1RUlBIPiYiIiP6lDC82IiMj4evrC2NjY+zYsQOXLl3ClClTYGNjo20zceJETJ06FbNnz8aJEyfg6OiIGjVq4OXLl9o2vXv3xoYNG7B69WocOXIEr169Qv369ZGQkKBt07p1a5w5cwZBQUEICgrCmTNn4O/vn9EPiYiIiL6ARkQkI+9w0KBBOHr0KA4fPpzm9SICZ2dn9O7dGwMHDgTwvhfDwcEBEyZMQNeuXREdHY0cOXJg2bJlaNGiBQDgn3/+gYuLC7Zv345atWrh8uXL8PDwQGhoKMqUKQMACA0NRbly5XDlyhUULFjwk7m+ePEC1tbWiI6ORtasWTPoGVCG26BtX3T72+PrZVAmRERE6fsMzfCejc2bN6NUqVL4/vvvYW9vj+LFi2PBggXa68PDwxEREYGaNWtqj5mamqJSpUoIDg4GAJw8eRLv3r3TaePs7AxPT09tm5CQEFhbW2sLDQAoW7YsrK2ttW1Sio2NxYsXL3QuREREpKwMLzZu3bqFuXPnIn/+/Ni5cyd++OEH9OrVC0uXLgUAREREAAAcHBx0bufg4KC9LiIiAiYmJsiWLdtH29jb26eKb29vr22T0rhx47TjO6ytreHi4vJlD5aIiIg+KcOLjcTERJQoUQJjx45F8eLF0bVrV3Tu3Blz587VaafRaHR+FpFUx1JK2Sat9h+7n8GDByM6Olp7uXfv3uc+LCIiIvqXMrzYcHJygoeHh86xwoUL4+7duwAAR0dHAEjV+/D48WNtb4ejoyPi4uIQGRn50TaPHj1KFf/Jkyepek2SmJqaImvWrDoXIiIiUlaGFxu+vr64evWqzrFr167B1dUVAODu7g5HR0fs3r1be31cXBwOHjwIHx8fAEDJkiVhbGys0+bhw4e4cOGCtk25cuUQHR2N48ePa9scO3YM0dHR2jZERESkf0YZfYd9+vSBj48Pxo4di+bNm+P48eP4448/8McffwB4f+qjd+/eGDt2LPLnz4/8+fNj7NixsLCwQOvWrQEA1tbW6NixI/r27Qs7OzvY2tqiX79+8PLyQvXq1QG87y2pXbs2OnfujPnz5wMAunTpgvr163/WTBQiIiJSR4YXG9999x02bNiAwYMHY+TIkXB3d8f06dPRpk0bbZsBAwbgzZs36NatGyIjI1GmTBns2rULVlZW2jbTpk2DkZERmjdvjjdv3qBatWpYsmQJDA0NtW1WrFiBXr16aWet+Pn5Yfbs2Rn9kIiIiOgLZPg6G18TrrNBRET07+h1nQ0iIiKi5FhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaJYbBAREZGiWGwQERGRolhsEBERkaKM9J1AZuc2aNsX38ft8fUyIBMiIqKvE3s2iIiISFEsNoiIiEhRLDaIiIhIUSw2iIiISFEsNoiIiEhRLDaIiIhIUSw2iIiISFGKFxvjxo2DRqNB7969tcdEBMOHD4ezszPMzc1RuXJlXLx4Ued2sbGx6NmzJ7Jnzw5LS0v4+fnh/v37Om0iIyPh7+8Pa2trWFtbw9/fH1FRUUo/JCIiIkoHRYuNEydO4I8//kDRokV1jk+cOBFTp07F7NmzceLECTg6OqJGjRp4+fKltk3v3r2xYcMGrF69GkeOHMGrV69Qv359JCQkaNu0bt0aZ86cQVBQEIKCgnDmzBn4+/sr+ZCIiIgonRQrNl69eoU2bdpgwYIFyJYtm/a4iGD69OkYMmQImjRpAk9PTwQGBuL169dYuXIlACA6OhoLFy7ElClTUL16dRQvXhzLly/H+fPnsWfPHgDA5cuXERQUhD///BPlypVDuXLlsGDBAmzduhVXr15V6mERERFROilWbHTv3h316tVD9erVdY6Hh4cjIiICNWvW1B4zNTVFpUqVEBwcDAA4efIk3r17p9PG2dkZnp6e2jYhISGwtrZGmTJltG3Kli0La2trbZuUYmNj8eLFC50LERERKUuRvVFWr16NU6dO4cSJE6mui4iIAAA4ODjoHHdwcMCdO3e0bUxMTHR6RJLaJN0+IiIC9vb2qe7f3t5e2yalcePGYcSIEel/QERERPSvZXjPxr179/DTTz9h+fLlMDMz+2A7jUaj87OIpDqWUso2abX/2P0MHjwY0dHR2su9e/c+Go+IiIi+XIYXGydPnsTjx49RsmRJGBkZwcjICAcPHsTMmTNhZGSk7dFI2fvw+PFj7XWOjo6Ii4tDZGTkR9s8evQoVfwnT56k6jVJYmpqiqxZs+pciIiISFkZXmxUq1YN58+fx5kzZ7SXUqVKoU2bNjhz5gzy5MkDR0dH7N69W3ubuLg4HDx4ED4+PgCAkiVLwtjYWKfNw4cPceHCBW2bcuXKITo6GsePH9e2OXbsGKKjo7VtiIiISP8yfMyGlZUVPD09dY5ZWlrCzs5Oe7x3794YO3Ys8ufPj/z582Ps2LGwsLBA69atAQDW1tbo2LEj+vbtCzs7O9ja2qJfv37w8vLSDjgtXLgwateujc6dO2P+/PkAgC5duqB+/fooWLBgRj8sIiIi+pcUGSD6KQMGDMCbN2/QrVs3REZGokyZMti1axesrKy0baZNmwYjIyM0b94cb968QbVq1bBkyRIYGhpq26xYsQK9evXSzlrx8/PD7NmzVX88RERE9GEaERF9J6EvL168gLW1NaKjoz84fsNt0LYvjnN7fL0vvo8vzSMjciAiIkryOZ+hSbg3ChERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKYrFBhERESmKxQYREREpisUGERERKcpI3wkQpYfboG1ffB+3x9fLgEyIiOhzsWeDiIiIFMVig4iIiBTFYoOIiIgUxWKDiIiIFMVig4iIiBTFYoOIiIgUxWKDiIiIFMVig4iIiBTFYoOIiIgUxWKDiIiIFMVig4iIiBTFYoOIiIgUxWKDiIiIFMVdX+mzfemOq9xtlYjo28SeDSIiIlIUiw0iIiJSFIsNIiIiUhSLDSIiIlIUiw0iIiJSFIsNIiIiUhSLDSIiIlJUhhcb48aNw3fffQcrKyvY29ujUaNGuHr1qk4bEcHw4cPh7OwMc3NzVK5cGRcvXtRpExsbi549eyJ79uywtLSEn58f7t+/r9MmMjIS/v7+sLa2hrW1Nfz9/REVFZXRD4mIiIi+QIYXGwcPHkT37t0RGhqK3bt3Iz4+HjVr1kRMTIy2zcSJEzF16lTMnj0bJ06cgKOjI2rUqIGXL19q2/Tu3RsbNmzA6tWrceTIEbx69Qr169dHQkKCtk3r1q1x5swZBAUFISgoCGfOnIG/v39GPyQiIiL6Ahm+gmhQUJDOz4sXL4a9vT1OnjyJihUrQkQwffp0DBkyBE2aNAEABAYGwsHBAStXrkTXrl0RHR2NhQsXYtmyZahevToAYPny5XBxccGePXtQq1YtXL58GUFBQQgNDUWZMmUAAAsWLEC5cuVw9epVFCxYMKMfGhEREf0Lio/ZiI6OBgDY2toCAMLDwxEREYGaNWtq25iamqJSpUoIDg4GAJw8eRLv3r3TaePs7AxPT09tm5CQEFhbW2sLDQAoW7YsrK2ttW1Sio2NxYsXL3QuREREpCxFiw0Rwc8//4zy5cvD09MTABAREQEAcHBw0Gnr4OCgvS4iIgImJibIli3bR9vY29unimlvb69tk9K4ceO04zus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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# show count per taxonomic group (PStaxID)\n", "of2orthomap.get_counts_per_ps(query_orthomap)\n", "\n", "# bar plot count per taxonomic group (PSname)\n", "ax = of2orthomap.get_counts_per_ps(query_orthomap).plot.bar(y='counts', x='PSname')\n", "ax.set_title('D. rerio - Number of genes per gene age class')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "e5c267d2", "metadata": {}, "source": [ "## Use pre-calculated gene age classification\n", "\n", "The query species in this part is: __*Caenorhabditis elegans*__ (nematode).\n", "\n", "Any pre-calculated gene age classification can be imported as a table using the function `orthomap2tei.read_orthomap(orthomapfile=filename)`.\n", "\n", "The pre-calculated gene age classification file should be delimited with two columns `GeneIDPhylostratum`, like e.g.:\n", " \n", "```\n", "GeneIDPhylostratum\n", "WBGene000000011\n", "WBGene000000021\n", "WBGene000000031\n", "WBGene000000041\n", "WBGene000000052\n", "```" ] }, { "cell_type": "markdown", "id": "b0714b80", "metadata": {}, "source": [ "The orthomap for this part was pre-calculated ([Sun et al., 2021](https://doi.org/10.1101/gr.275303.121)) and is available here:\n", "\n", "[https://doi.org/10.5281/zenodo.7242263](https://doi.org/10.5281/zenodo.7242263)\n", "\n", "or can be accessed with the `dataset` submodule of `oggmap`\n", "\n", "`datasets.sun21_orthomap(datapath='data')` (download folder set to `'data'`).\n", "\n", "__Note:__ If you want to use your own [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results, please have a look at the documentation of [Step 0 - run OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/orthofinder.html).\n", "\n", "A detailed description of how to extract an orthomap from [OrthoFinder](https://oggmap.readthedocs.io/en/latest/tutorials/https://github.com/davidemms/OrthoFinder) results is described in the first part." ] }, { "cell_type": "code", "execution_count": 11, "id": "3a598901", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100% [............................................................................] 344640 / 344640" ] }, { "data": { "text/plain": [ "'data/Sun2021_Orthomap.tsv'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "datasets.sun21_orthomap(datapath='data')" ] }, { "cell_type": "code", "execution_count": 12, "id": "20791b7e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "query name: Caenorhabditis elegans\n", "query taxID: 6239\n", "query kingdom: Eukaryota\n", "query lineage names: \n", "['root(1)', 'cellular organisms(131567)', 'Eukaryota(2759)', 'Opisthokonta(33154)', 'Metazoa(33208)', 'Eumetazoa(6072)', 'Bilateria(33213)', 'Protostomia(33317)', 'Ecdysozoa(1206794)', 'Nematoda(6231)', 'Chromadorea(119089)', 'Rhabditida(6236)', 'Rhabditina(2301116)', 'Rhabditomorpha(2301119)', 'Rhabditoidea(55879)', 'Rhabditidae(6243)', 'Peloderinae(55885)', 'Caenorhabditis(6237)', 'Caenorhabditis elegans(6239)']\n", "query lineage: \n", "[1, 131567, 2759, 33154, 33208, 6072, 33213, 33317, 1206794, 6231, 119089, 6236, 2301116, 2301119, 55879, 6243, 55885, 6237, 6239]\n" ] } ], "source": [ "# get query species taxonomic lineage information\n", "query_lineage = qlin.get_qlin(q='Caenorhabditis elegans')" ] }, { "cell_type": "code", "execution_count": 13, "id": "3091aa76", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GeneIDPhylostratum
0WBGene000000011
1WBGene000000021
2WBGene000000031
3WBGene000000041
4WBGene000000052
.........
20035WBGene003051329
20036WBGene003051571
20037WBGene0030515813
20038WBGene0030515911
20039WBGene003051730
\n", "

20040 rows × 2 columns

\n", "
" ], "text/plain": [ " GeneID Phylostratum\n", "0 WBGene00000001 1\n", "1 WBGene00000002 1\n", "2 WBGene00000003 1\n", "3 WBGene00000004 1\n", "4 WBGene00000005 2\n", "... ... ...\n", "20035 WBGene00305132 9\n", "20036 WBGene00305157 1\n", "20037 WBGene00305158 13\n", "20038 WBGene00305159 11\n", "20039 WBGene00305173 0\n", "\n", "[20040 rows x 2 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get query species orthomap\n", "\n", "# download pre-calculated orthomap here: https://doi.org/10.5281/zenodo.7242263\n", "# or download with datasets.sun21_orthomap(datapath='data')\n", "query_orthomap = orthomap2tei.read_orthomap(orthomapfile='data/Sun2021_Orthomap.tsv')\n", "query_orthomap" ] }, { "cell_type": "markdown", "id": "651e303a", "metadata": {}, "source": [ "### Gene age assignments per query species lineage node\n", "\n", "Given a pre-calculated orthomap, one can still get an overview of the gene age assignments per query species lineage node.\n", "\n", "However, since it might be that some columns are missing which normally are produced by the `of2orthomap.get_orthomap()`function, the column names need to be set specifically with the `of2orthomap.get_counts_per_ps()` function to visualize the distribution of the gene age classes as follows:" ] }, { "cell_type": "code", "execution_count": 14, "id": "a368c4ab", "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", " \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", "
Phylostratumcounts
Phylostratum
001290
115434
224666
33603
441039
55808
66274
77884
88590
99511
1010384
11111113
12121277
13131167
\n", "
" ], "text/plain": [ " Phylostratum counts\n", "Phylostratum \n", "0 0 1290\n", "1 1 5434\n", "2 2 4666\n", "3 3 603\n", "4 4 1039\n", "5 5 808\n", "6 6 274\n", "7 7 884\n", "8 8 590\n", "9 9 511\n", "10 10 384\n", "11 11 1113\n", "12 12 1277\n", "13 13 1167" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# show count per taxonomic group (Phylostratum)\n", "of2orthomap.get_counts_per_ps(omap_df=query_orthomap,\n", " psnum_col='Phylostratum',\n", " pstaxid_col=None,\n", " psname_col=None)" ] }, { "cell_type": "code", "execution_count": 15, "id": "8b0ecd1a", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAGxCAYAAAA3XV9iAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABMZElEQVR4nO3deVhUhfoH8O/AsC8j6yCKgEqoIa6FaAqmuCSaWZmhCOWWpoZpLtfK5Rqa3VzSUvNm7ktdl3LDXW4mqJi4pbYoigmCiuDK+v7+8Me5DiDCgRHT7+d55nk457znnPcMw8yXs41GRAREREREKphUdQNERET098UgQURERKoxSBAREZFqDBJERESkGoMEERERqcYgQURERKoxSBAREZFqDBJERESkGoMEERERqcYgYQTHjh3DW2+9BW9vb1haWsLW1hZNmzbF9OnTce3aNaOuW6PRYOLEiUZdx9/V4sWLodFoYGlpifPnzxebHhwcDD8/vyroDNi7dy80Gg3+85//VMn6yyspKQldunSBo6MjNBoNoqKiqrolokei8G917969Vd3KY0Nb1Q08aRYuXIghQ4bA19cXH3zwARo0aIDc3FwkJCRg/vz5iIuLw/r166u6zadadnY2PvzwQyxbtqyqW/nbGjFiBA4cOIBFixbBzc0N1atXr+qWiKiKMEhUori4OAwePBghISHYsGEDLCwslGkhISEYOXIkYmJiqrBDAoBOnTph5cqVGDVqFBo1alTV7TxSd+7cgaWlJTQaTYWWc+LECTz//PPo3r175TRGpbp9+zasra2rug2iEvHQRiWKjo6GRqPB119/bRAiCpmbm6Nbt26qlp2amopBgwahZs2aMDc3h7e3NyZNmoS8vLxKm/fixYt47bXXYGdnh2rVqqF37944dOgQNBoNFi9erNQlJCSgV69e8PLygpWVFby8vPDmm28WO1xQeChhz549GDx4MJydneHk5IQePXrg0qVLBrW7d+9GcHAwnJycYGVlhVq1auHVV1/F7du3VT1fpRk9ejScnJwwZsyYUuuSkpKKbXuhooeQJk6cCI1Gg2PHjuH111+HTqeDo6Mj3n//feTl5eHMmTPo1KkT7Ozs4OXlhenTp5e4zrt37+L999+Hm5sbrKysEBQUhCNHjhSrS0hIQLdu3eDo6AhLS0s0adIE3333nUFN4fO/fft2vP32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zs5O2fOg0+lgZWUFjUaDqKgoREdHw8fHBz4+PoiOjoa1tTXCwsKU2n79+mHkyJFwcnKCo6MjRo0ahYYNG6J9+/YAgPr166NTp04YMGAAFixYAAAYOHAgQkNDy3TFBhERET0a5QoS8+bNAwAEBwcbjP/2228RGRkJABg9ejTu3LmDIUOGICMjAwEBAdi+fTvs7OyU+pkzZ0Kr1aJnz564c+cO2rVrh8WLF8PU1FSpWbFiBYYPH65c3dGtWzfMnTtXzTYSERGRkVToPhKPM95H4tH2UFl9EBFR1Xtk95EgIiKipxuDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESqMUgQERGRatqqbqCqeY3dXKH5k6Z1qaROiIjo76CinxvAk/XZwT0SREREpBqDBBEREanGIEFERESqMUgQERGRagwSREREpBqDBBEREan21F/+SURE9HfzOF2Cyj0SREREpBqDBBEREanGQxtERPS3wbsRP364R4KIiIhUY5AgIiIi1RgkiIiISLVyB4n//ve/6Nq1K9zd3aHRaLBhwwaD6SKCiRMnwt3dHVZWVggODsbJkycNarKzszFs2DA4OzvDxsYG3bp1w8WLFw1qMjIyEB4eDp1OB51Oh/DwcFy/fr3cG0hERETGU+6TLW/duoVGjRrhrbfewquvvlps+vTp0zFjxgwsXrwYzzzzDKZMmYKQkBCcOXMGdnZ2AICoqChs3LgRq1evhpOTE0aOHInQ0FAcPnwYpqamAICwsDBcvHgRMTExAICBAwciPDwcGzdurMj2EpXqcbo2m4jo76DcQaJz587o3LlzidNEBLNmzcL48ePRo0cPAMCSJUug1+uxcuVKDBo0CJmZmfjmm2+wbNkytG/fHgCwfPlyeHh4YOfOnejYsSNOnTqFmJgYxMfHIyAgAACwcOFCBAYG4syZM/D19S227uzsbGRnZyvDWVlZ5d00IiIiKqdKPUfi3LlzSE1NRYcOHZRxFhYWCAoKwv79+wEAhw8fRm5urkGNu7s7/Pz8lJq4uDjodDolRABAixYtoNPplJqipk6dqhwG0el08PDwqMxNIyIiohJUapBITU0FAOj1eoPxer1emZaamgpzc3M4ODiUWuPq6lps+a6urkpNUePGjUNmZqbySE5OrvD2EBERUemMckMqjUZjMCwixcYVVbSmpPrSlmNhYQELCwsV3RIREZFalbpHws3NDQCK7TVIS0tT9lK4ubkhJycHGRkZpdZcvny52PLT09OL7e0gIiKiqlOpQcLb2xtubm7YsWOHMi4nJwexsbFo2bIlAKBZs2YwMzMzqElJScGJEyeUmsDAQGRmZuLgwYNKzYEDB5CZmanUEBERUdUr96GNmzdv4o8//lCGz507h8TERDg6OqJWrVqIiopCdHQ0fHx84OPjg+joaFhbWyMsLAwAoNPp0K9fP4wcORJOTk5wdHTEqFGj0LBhQ+Uqjvr166NTp04YMGAAFixYAODe5Z+hoaElXrFBREREVaPcQSIhIQFt27ZVht9//30AQEREBBYvXozRo0fjzp07GDJkCDIyMhAQEIDt27cr95AAgJkzZ0Kr1aJnz564c+cO2rVrh8WLFyv3kACAFStWYPjw4crVHd26dcPcuXNVbygRERFVvnIHieDgYIjIA6drNBpMnDgREydOfGCNpaUl5syZgzlz5jywxtHREcuXLy9ve0T0BOENwogef/yuDSIiIlKNQYKIiIhUY5AgIiIi1RgkiIiISDWj3NmSiCqmoicZ8gRDInpUuEeCiIiIVGOQICIiItUYJIiIiEg1BgkiIiJSjUGCiIiIVGOQICIiItUYJIiIiEg1BgkiIiJSjUGCiIiIVGOQICIiItUYJIiIiEg1ftcGPTYq+v0SAL9jgojoUWOQICIqBQMuUel4aIOIiIhUY5AgIiIi1RgkiIiISDUGCSIiIlKNJ1sSET3meMInPc64R4KIiIhUY5AgIiIi1RgkiIiISDUGCSIiIlKNQYKIiIhUY5AgIiIi1RgkiIiISDXeR4KIiMqkovez4L0snkzcI0FERESqMUgQERGRagwSREREpBqDBBEREanGIEFERESq8aoNIioRz9AnorLgHgkiIiJSjUGCiIiIVGOQICIi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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# bar plot count per taxonomic group (Phylostratum)\n", "ax = of2orthomap.get_counts_per_ps(omap_df=query_orthomap,\n", " psnum_col='Phylostratum',\n", " pstaxid_col=None,\n", " psname_col=None).plot.bar(y='counts', x='Phylostratum')\n", "ax.set_title('C. elegans - Number of genes per gene age class')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "afdb8179", "metadata": {}, "source": [ "If you like to continue, please have a look at the documentation of [Step 3 - map gene/transcript IDs](https://oggmap.readthedocs.io/en/latest/tutorials/geneset_overlap.html) to get further insides." ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:scanpy]", "language": "python", "name": "conda-env-scanpy-py" }, "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.8.15" } }, "nbformat": 4, "nbformat_minor": 5 }