{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Custom profiles\n", "===============\n", "\n", "RNAvigate can create Profile data from several common filetypes through the use of\n", "[standard data keywords](../get_started/loading_data).\n", "However, you may wish to create Profiles from other file types or from values that you have calculated in Python.\n", "\n", "There are options to turn almost anything into a full-featured RNAvigate profile.\n", "\n", "1. [An array of values](#an-array-of-values)\n", "2. [A Pandas DataFrame](#a-pandas-dataframe)\n", "3. [A table-like data file](#a-table-like-data-file)\n", "3. [A non-table-like data file](#a-non-table-like-data-file)\n", "\n", "If you are having trouble getting a particular data file to work with RNAvigate,\n", "feel free to submit an [issue](https://github.com/Weeks-UNC/RNAvigate/issues/).\n", "Please include an example file or detailed file specification.\n", "\n", "For common standardized file formats, it may be worthwhile (and easy!) to add automatic parsing to RNAvigate.\n", "For this, submit a GitHub issue, included an example file, a detailed file spec, and an example visualization." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import rnavigate as rnav\n", "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An array of values\n", "------------------\n", "\n", "We start with an array of values and a sequence.\n", "This array must be 1 value for each nucleotide.\n", "The input sequence can be an existing RNAvigate data object, a fasta file, or a sequence string.\n", "Here I am using a sequence string.\n", "\n", "Using an arbitrary data keyword, we can directly create and assign any RNAvigate data object.\n", "Here I use `rnav.data.Profile.from_array` to create the profile.\n", "\n", "`input_data` (the array) and `sequence` (a data object, fasta file, or sequence string) arguments are required.\n", "`metric` and `metric_defaults` allow me to customize the color representation of the data and the associated colorbar legend.\n", "`\"Profile\"` is the default name given to the column containing the input array." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Warning: seq-object missing expected error column\n" ] }, { "data": { "image/png": "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L63+Hc8nPj5ef/zxh315/fr1Cg4O1vbt23MsDgDISV5mBwAAuWHx4sVq3769qlatanYoOeLq1asaMGCAWrdurZEjR0qSgoKCNGvWLNWsWdOUmO677z5NnDjRvmyz2XTjxg2tX79eb7zxhqKiogzbXemVV15RwYIF7csnTpzQkCFDNHz4cHXt2lWSVL9+fVPzAwDZRSEPIF9ITEzU5MmTtWbNGnl4eJgdjstdunRJv/32m1q3bm1fFxAQ4NJR9swqWrRomv137dpVTz75pFasWKGBAwfq/vvvd3nfd+dBkn7//XedPXvWsC4wMFCBgYEu7xsAcgtTawDkC61bt9a+ffu0evVqs0PJ94oWLapWrVopJSVF+/fvNzscALAsCnkA+cKECRPk7++vf/7zn7p48WK6+95r7vThw4cVHByssLAww/offvhBAwcOVP369dWgQQM999xz2rt3b7p9JCQkaOHChWrbtq1q1qypJk2aaNKkSbp06VKqfb/55hs9++yzqlu3rurUqaNnnnnGENv69evVpUsXSdL8+fMVHByss2fPpjlH3maz6YMPPlDbtm1Vu3ZtdenSRf/+97/TjPHUqVMaO3asGjZsqFq1aqlDhw5auXKlS+a23/mrSFJSkn3dyZMnNWbMGD322GOqWbOm2rdvryVLlig5Odlw7Pbt2xUaGqp69eqpbt266tGjh7744gvDPnfPkQ8LC9Pw4cMlSRMnTlRwcLCktB/nlJQURUREqGPHjqpZs6YaNGigESNG6MiRI4b2n332WT3zzDPau3evnnnmGT388MNq2LChJk2apJiYmGznBwAygkIeQL5QokQJTZo0STdu3NDrr7/usna3b9+ufv366fTp0xo4cKBGjhypS5cuqX///tq3b1+ax6SkpGjYsGGaP3++6tWrp8mTJ6tz587avHmzevToocuXL9v3/eSTTzRo0CBdunRJw4YN08iRI3Xjxg0NHz7cXqDXr19fY8aMkSSFhIRo1qxZKlmyZJp9T58+XTNnzlSFChU0fvx41a5dW8OHD9eVK1cM+x07dkzdu3fX3r179eyzz2rChAkKDAzU9OnT9eqrr2YrZykpKdq1a5ck2eenHz58WN26ddPXX3+t0NBQTZw4UYGBgZo9e7ZGjRpl//Kwd+9ejRo1SgUKFNCYMWP08ssvS5LGjRunLVu2pNlfSEiInnvuOUlSaGioZs2adc/YJkyYoGnTpikgIEDjx49X7969tWfPHoWGhuqnn34y7HvmzBkNHjxY1apV06RJk9SwYUOtW7dOU6dOzVZ+ACCjmCMPIN948skntXHjRkVGRur//u//1LZt22y1Z7PZNG3aNJUsWVKfffaZfH19JUnt27dX69attXjxYoWHh6c6buPGjfr22281a9YswxzyDh06qHv37po3b56mT5+u//73v5oxY4YqVqyo9evXy8fHR5LUp08f9ezZU3PmzFG7du0UGBio5s2ba+7cuQoODr7nvPiTJ09q9erV6tChg9555x37+lq1amny5MmGfadNmyZvb29t2LDB/qWgd+/emjlzpj744AN16dJFjz76aLr5SUlJUXR0tH05MTFRZ8+e1YcffqijR4+qQ4cO9jnqb7zxhuLj4/XZZ5+pWrVq9v5ee+01rVmzRlu3blW7du305ZdfKikpSQsWLLDH1blzZ3Xv3l1HjhxRu3btUsVRvXp1NWjQQMuXL1edOnXumZ/vvvtOn3/+uTp06KA5c+bY/2rQtWtXdezYUa+++qo2bdpk3//y5ct688031a1bN0lSjx49dP78eW3fvl03b95UkSJF0s0PAGQXI/IA8pWpU6eqaNGimjZtmq5fv56ttg4ePKgLFy6oe/fu9iJekvz9/fXRRx/dc+R/69at8vb2VtOmTRUdHW3/V6ZMGVWvXl2RkZGSbheWcXFx6tevn72IlyRvb28NGjRIiYmJ2rFjR4bj3blzp1JSUtSrVy/D+q5du8rPz8++fO3aNf3www9q0qSJJBlivFMo34kxPX/88YcaNWpk/9esWTP16tVLO3fuVGhoqKZPny7p9h13fvrpJ4WEhNiL+DvuTInZtm2bJKlMmTKSbhf++/fvV0pKinx8fLR582aNHj06w7lIy50+XnjhBcMF0YGBgerUqZOOHTumkydP2td7eHioffv2hjYeeughJSUlMb0GQK5gRB5AvlK2bFmNGTNGb775pmbPnq1p06Zlua07d0GpWLFiqm135mGnJSoqSvHx8WrcuPE997l165a9/aCgoFTb76xzvBNLes6cOSNJqlSpkmG9p6enKleurJs3b9r3s9ls2rBhgzZs2JBmW+fPn3faX0BAgGbPnm3op3jx4qpSpYq8vb3t68+dO2c4p7uVKlVKxYsXt59nnz599N1332nLli3asmWL/Pz81LRpU3Xs2FFPPPGE05jSc/bsWXl6eqb5eN6d7ypVqki6fdFu0aJFDfvdueWl47x+AMgJFPIA8p0+ffpo06ZN+uSTT9SpU6cMH3f3hZnSX8VaoUKFMtV/SkqKSpUqle5cbS8vL/u88LRul5mVvu+0c+vWrTRjcvz/U089dc/83GsO/t28vb3T/bLi2N+9bguakpJiP08fHx8tX75cBw4c0FdffWUv6jdt2qSePXtm6/qHlJSUdGOQjPkuUIA/agMwF+9CAPKdAgUKaNq0afLy8tKUKVOUkJCQarukVOuvXr1qWC5btqwk6fTp06n6WLx4sX3qiKNy5copJiZGjz76qBo3bmz4l5CQIC8vL3l5eal8+fKSpOPHj6dq48SJE5KkBx54ICOnLEmqUKGCpNv3VL+bzWazj9bfiU+6Xbw6xvfQQw/p+vXrqUais+POPPm0zvPixYu6ceOGfUrNmTNn9OOPP6pmzZp68cUX9dFHH+nrr79W9erVtXbtWsXGxmYrjqSkpDQfz6zkGwByGoU8gHwpODhYAwcO1O+//26Y9yzdns4hSYcOHTKsv/tCR+n2HVdKlSqlzz77THFxcfb10dHRWrp0qU6dOpVm3yEhIUpMTNR7771nWP/LL79o2LBh9vVNmjRR0aJFtXz5ckP78fHxWrZsmby8vNS8eXNJf335uHtk3VGrVq3k5eWV6paOGzduNFyUWqpUKdWpU0dbtmyxF7B3hIWFadSoUfr111/v2U9m+fv7q27dutq2bZuOHj1q2LZw4UJ77JI0Z84c9e/f33CbzoCAAJUrV04FChS45yh5RvJz50ekFi5caLjF5pkzZ/TFF1+oatWqaU67AQCzMLUGQL41fPhwbd26NVXB/dhjj+mBBx6w394xMDBQO3bsSDVSW7BgQU2ZMkWjR4/W008/rW7dusnLy0tr1qxRQkKC/daIjp5++mlt2rRJCxYs0PHjx9WwYUNdunRJq1evlo+Pj/24EiVKaPz48Zo6daq6du2qp59+Wp6entqwYYOOHj2qCRMm2H8V1d/fX5L01VdfqWzZsmrTpk2qfgMDAzVs2DCFhYXpueee09///ndFRUXpo48+MlzsKklTpkzRs88+q9DQUPXq1UvlypXT999/ry1btqhJkybZvuOPo8mTJ9vvzd67d2+VLl1aX3/9tXbu3KmWLVvq73//uyRpwIABioyMVJ8+fdS9e3eVKFFCP/74oyIjIxUaGmq4KPhuAQEBkm5/abHZbHrqqadS7dO0aVN16NBBmzZtUnR0tFq1aqXo6GitWrVK0u0LbAHAnVDIA8i3ChUqpGnTpqlv376G9XdGrd9++22tWrXKPvK9YsUKNW3a1LBv27ZttWzZMi1cuFALFixQoUKF9PDDD2vevHn3vOC1YMGCWrp0qRYvXqxNmzbpq6++kp+fnxo2bKiRI0fqwQcftO/bs2dPlS5dWkuWLNHChQvl6emphx56SIsWLVKLFi3s+wUEBGjEiBFasWKFpk+fbp9G42jEiBEqU6aMli9frrffflvlypXT22+/rRUrVujPP/+071ezZk198sknmj9/vj7++GPFxcWpbNmyGjlypAYOHCgvL9d+fNSsWVMff/yxwsLCtHbtWt28eVMVK1bUxIkT9eyzz9rnrj/88MP64IMPtGjRIn3wwQeKjY1VYGCgXnrpJfXv3/+e7deqVUs9evTQpk2b9Ouvv+qxxx5Lc79Zs2apZs2a+vTTTzVz5kz5+vqqUaNGGj58uOFxAQB34GFzxU/0AQAAAMhVzJEHAAAALIhCHgAAALAgCnkAAADAgijkAQAAAAuikAcAAAAsiEIeAAAAsCAKeQAAAMCCKOQBAAAAC6KQBwAAACyIQh4AAACwIAp5AAAAwIIo5AEAAAALopAHAAAALIhCHgAAALAgCnkAAADAgijkAQAAAAv6/yQXtbqmsuKFAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb8AAADZCAYAAACwyT6BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAABWIAAAViAHE10CgAAAi3klEQVR4nO3dd3xUVd7H8c+dhCAQQGlBOoIzAiEkJApxkYVQFIQAAgYwLCoLLrqsrA0EdFUeBUVWWGkCCtIiTVCUokTkUVlKQOmhCAkk9JaCgZDMef4IzMMYKSrJIPf7fr3y8sy5Z879zczLfHNuGSxjjEFERMRGHL4uQEREpLAp/ERExHYUfiIiYjsKPxERsR2Fn4iI2I7CT0REbEfhJyIitqPwExER21H4iYiI7Sj8RETEdhR+IiJiOwo/ERGxHYWfiIjYjsJP5DqJioqiQ4cOBTZ/z549iYiI+M3P37dvn9fjgq5X5Ebm7+sCRKTgjRw5kuXLl7NixQpP3+DBgylSpIgPqxLxHYWfiA18++23uN1ur76WLVv6qBoR39NhTxERsR2Fn/hcz5496d69O2vXriUmJoaQkBCaNm3KpEmTAPjoo4+4//77CQ0NpXPnziQkJADgdrv585//TOvWrfPNmZmZSUhICEOGDLnivlNSUhg4cCBNmjQhNDSUDh06MH/+fK8xqampvPTSS0RFRREcHExYWBg9evRg1apVV31tV5t/7dq1uFwupk2b5vW89PR0XC4XgwYNuuL8GzZsoF+/fkRGRlKvXj0aN25M//792bt3r2eMy+UiMTGR1NRUXC4X7777LvDL5/z27t3LP//5Txo1akRwcDBt27ZlypQp5Obm5qt55cqVvPXWW9x3333Ur1+fTp068eWXX3rNd/jwYQYMGEDTpk0JDg6mRYsWDB8+nMzMzKu+dyIFSYc95YaQnJzMk08+SUxMDB06dGDu3LmMGjWKhIQEdu3aRWxsLADjxo3j73//O19++SUlS5akffv2TJ48mc2bNxMSEuKZb9myZZw7d+6KF3SkpqbSuXNnsrOz6dGjB1WrVmXFihUMGTKEjIwMHnvsMU6ePMnDDz+MZVl0796dChUqcODAAeLi4ujXrx/Lly+natWqv3n+32PNmjX07t0bl8vFE088QbFixdi0aROLFi1i165dLF26FIfDwVtvvcXo0aPJysrixRdfxOVy/eJ8O3bs4JFHHsGyLB555BGCgoL43//9X0aOHMkPP/zAu+++i2VZnvHDhg2jePHi9O7dm9zcXKZOnUr//v359NNPcTqdnD9/nt69e3PixAliY2MJCgpi+/btfPjhh+zbt8/zx42ITxgRH4uNjTVOp9N8/PHHnr7ExETjdDpNvXr1zP79+z397733nnE6nea7774zxhizZ88e43Q6zRtvvOE151/+8hfTrFkz43a7L7vfZ555xrhcLvP99997+nJzc01MTIy55557THZ2tpk8ebJxOp1mw4YNXs/97LPPjNPpNB988IGnr3nz5iY6OvpXzb9mzRrjdDrN1KlTveZPS0szTqfTDBw40Ot9Cg8P9zzu06ePueeee0xGRobXc1966SXjdDrN1q1bPX3R0dGmefPmXuN+Xm+3bt1M3bp1zc6dO73G/etf/zJOp9MsWbLEGGM8Nbdu3dqcPXvWM27VqlXG6XSaf//738YYYzZt2mScTqeZMmWK13zDhg0zXbp0MVlZWUbEV7TykxvGpYcva9WqBUDdunW9VlbVq1cH4OjRo55x9erVY8mSJQwcOBCHw8GRI0dYt24dffv29VqpXMoYw8qVKwkPDyc0NNTT73A4ePvtt8nNzcXf35+//vWvdOzYkXLlynnG5OTkYIwB4MyZM79r/t9jwoQJpKWlERgY6Ok7c+YMAQEBAPz000/XPNeJEyfYuHEjbdq0wel0em176qmniIuL48svv6RNmzae/pYtW1K0aFHP43r16gFw7NgxAIKCgnA4HMyePZtKlSpx3333ERgYyNChQ3/9ixW5zhR+ckMoXrw4JUqU8Dy+GAxly5b1Gufn5wfgdeVix44def3111m3bh2NGzfms88+w+12Ex0dfdn9nTp1ijNnzlCtWrV826pUqeL12BjD2LFj2bJlCwcOHGD//v2cP3/es+33zv9b+fn5cfToUcaPH8/u3bs5cOAAhw4d8rw3P7+680pSU1OB//+j41Lly5enVKlSpKSkePVf+gcB4Llt4uJ+g4KCGDhwIG+//TYDBgzA39+f0NBQWrZsSZcuXShZsuS1v1iR60wXvMgN4WKo/dzlVm6XateuHUWKFOHzzz8HYPHixQQHB//iL/KLLl7AcenK5Zds376d+++/nw8//JCiRYvStm1bRo8ezYcffnjF513r/JeTk5Nz1THz5s2j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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "my_array = np.random.rand(160) * 5 # 160 random values between 0 and 5\n", "my_sequence = \"AUGC\" * 40 # AUGC repeating 40 times (160 nts total)\n", "\n", "test = rnav.Sample(\n", " sample=\"test\",\n", " my_profile=rnav.data.Profile.from_array(\n", " input_data=my_array,\n", " sequence=my_sequence,\n", " metric=\"Profile\",\n", " metric_defaults={\n", " \"Profile\": {\n", " \"metric_column\": \"Profile\",\n", " \"title\": \"my calculations\",\n", " \"cmap\": \"inferno\",\n", " \"normalization\": \"min_max\",\n", " \"values\": [1, 4],\n", " \"ticks\": [1, 2, 3, 4],\n", " \"extend\": \"both\"\n", " }\n", " }\n", " )\n", ")\n", "\n", "plot = rnav.plot_profile(\n", " samples=[test],\n", " profile=\"my_profile\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A Pandas DataFrame\n", "------------------\n", "\n", "DataFrames provide more flexibility than arrays of values.\n", "These can contain any number of columns, containing per-nucleotide values and optional error rates.\n", "\n", "This DataFrame must start with a particular structure:\n", "\n", "- one row per nucleotide\n", "- A \"Nucleotide\" column containing nucleotide positions\n", "- A \"Sequence column containing the nucleotide identities\n", "- Any number of additional columns\n", "\n", "Again, using an arbitrary data keyword, we can directly create and assign any RNAvigate data object.\n", "Here I use `rnav.data.Profile` to create the profile.\n", "\n", "`input_data` (the DataFrame) argument is required.\n", "`metric` and `metric_defaults` allow me to customize the color representation of the data and the associated colorbar legend.\n", "Color representation can be defined seperately for different columns.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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peQzl7KSv9TU1Lv2cfvP77glNTVVb7zxhj799FP17t1bjzzyiCTZDtK+E/J5y++//64PP/xQc+bMUeHChTNch3xmXXJyss6dO6dFixapXr16kqQGDRro4sWLmjt3rnr27OnUfPJIwM53332n7t27K3/+/Fq8eLHKly8v6ca3yIy+Md48bVLBggVdGqc7W7ZsmX755Re99dZbslgsSklJsZ2CymKxKDU1lXxmw81cNGvWzG55WFiYypYtq9jYWPKZDWfOnNHSpUvVrVs3DR8+XPXr11e7du20cOFCxcXFaebMmeQzl7KSv5sF1J3Wy2jkzttdvnxZzz//vD799FP9+9//1rBhw2y3kc+sSUxM1LBhw9SlSxfVrVtXKSkpSklJkXSjeE9JSZHVaiWf2VCwYEEFBgbaivibmjRpouvXr+vgwYNOzSeFPGzmzp2rF154QZUrV9ann35qK+IlqVKlSjp9+rSuX79ud58jR44oICBAoaGhrg7Xba1evVqJiYmKiopSRESEIiIi9NZbb0mSoqKi1KNHD/KZDRUqVJCkDA+wTE5OVv78+clnNpw6dUpWqzXdMTEhISGqWLGi9u/fTz5zKSv5K1eunPz9/dMdb3D9+nWdOXPGdrIB3PD3338rOjpaW7du1dixY/Xiiy/a3U4+s2bXrl06duyYlixZYvt8ioiIUHx8vL766itFRETo559/Jp/ZUKFCBaWmptq+EN1089fkfPnyOTWfFPKQJC1evFiTJk1Ss2bN9PHHH6tYsWJ2tzdp0kTJyclav369bVlKSorWr1+v+vXr2539wtu98cYb+vzzz+0uvXr1knTjfP1vvPEG+cyGsLAwlS9fXt9++63ddITY2FidPn1aDzzwAPnMhvLly8vf31+//vqr3fK4uDgdOXJEoaGh5DOXspK/vHnzqn79+lq3bp1dAbBu3TolJyerSZMmRoTulhISEvTss8/q77//1gcffKAuXbqkW4d8Zk1ERES6z6fPP/9chQoVUrNmzfT5558rIiKCfGbDQw89pGvXrmndunV2y2NiYhQcHKywsDCn5pM58tDJkyc1YcIElSxZUr169dLevXvtbr/nnntUp04dNW3aVKNHj9aFCxdUrlw5LV68WEePHtX48eMNitw9VapUKd2yP/74Q5JUtWpVlS1bVpLIZzaMGDFCAwYM0PPPP69nnnlGcXFxmjJlisqXL6/OnTurQIEC5DOLgoOD1bNnT82dO1d+fn566KGHdOHCBX3wwQeSpL59+yosLIx85kJW3y8HDhyobt26qV+/furevbuOHTumKVOmqHXr1qpVq5aBe+Be3n33XR09elT9+vVTwYIF0/0pWa1ateTr60s+s6BgwYKqWbNmuuV+fn4KCgqyu418Zs0jjzyiZcuWadSoUTp37pwqV66sNWvW6Pvvv9fYsWNtZ61zVj4p5KGYmBglJyfr9OnT6tatW7rbe/bsqeHDh2vKlCl69913NWvWLF29elXVqlXTvHnzeEHnEPnMuubNm2v+/PmaNm2aBg0apHz58qlJkyYaPny4ChQoIIl8ZsfQoUNVqlQpLV26VEuWLFGxYsV03333acaMGbazM5DP3MlK/urUqaM5c+ZoypQpGjRokIKCgtSlSxcNGTLEwMjdz81TIc+ePVuzZ89Od/tvv/2mwMBA8ulg5DNr/P39NW/ePL3//vuaO3euLl68qIoVK2rSpEl67LHHbOs5K58+1swOpQUAAADgdpgjDwAAAJgQhTwAAABgQhTyAAAAgAlRyAMAAAAmRCEPAAAAmBCFPAAAAGBCFPIAAACACVHIAwAAACZEIQ8AAACYEIU8AAAAYEIU8gA82ogRIxQeHq7333//juu0b99ezZs3d1oM06ZNU3h4uPbs2eO0bUhSamqqjh07Zrv+008/KTw8XB999FGm923evLnat2/vsFiaN2+u8PBwu0v16tV133336YknntCSJUtktVodtr2Mtp92f65fv66///7bdn3FihUKDw/X+vXrnRYHADiTv9EBAIArzJkzR23btlXlypWNDsUpLly4oJ49e6ply5YaNGiQJCksLEwTJ05UZGSkITEVLVpUI0eOtF23Wq26cuWKVqxYoTfffFPHjh2zu92RXn31VeXJk8d2/eDBg+rbt68GDBigjh07SpIefPBBQ/MDALlFIQ/AKyQnJ2v06NFatmyZfHx8jA7H4c6ePau9e/eqZcuWtmUhISEOHWXPrgIFCmS4/Y4dO+qRRx7RokWL1KtXL91zzz0O3/bteZCkw4cP68SJE3bLQkNDFRoa6vBtA4CrMLUGgFdo2bKlduzYoaVLlxoditcrUKCAWrRoIYvFoj/++MPocADAtCjkAXiFESNGqFixYnrvvfd05syZu657p7nTe/bsUXh4uKZNm2a3/Oeff1avXr304IMPqm7dunr22We1ffv2u24jKSlJM2fOVOvWrRUZGalGjRpp1KhROnv2bLp1N2/erKefflp16tRR7dq19eSTT9rFtmLFCnXo0EGSNH36dIWHh+vEiRMZzpG3Wq1asGCBWrdurVq1aqlDhw764YcfMozxyJEjGjp0qOrXr6+aNWuqXbt2+vjjjx0yt/3mryIpKSm2ZYcOHdKQIUNUr149RUZGqm3btpo7d65SU1Pt7rt+/XpFR0frgQceUJ06ddSlSxd98803duvcPkd+2rRpGjBggCRp5MiRCg8Pl5Tx42yxWLR48WI9+uijioyMVN26dTVw4EDt27fPrv+nn35aTz75pLZv364nn3xS9957r+rXr69Ro0YpPj4+1/kBgKygkAfgFYoUKaJRo0bpypUreuONNxzW7/r169WjRw8dPXpUvXr10qBBg3T27Fk999xz2rFjR4b3sVgs6t+/v6ZPn64HHnhAo0ePVvv27bV69Wp16dJF586ds627fPly9e7dW2fPnlX//v01aNAgXblyRQMGDLAV6A8++KCGDBkiSYqKitLEiRMVHByc4bbHjRunCRMmqFy5cho+fLhq1aqlAQMG6Pz583br7d+/X507d9b27dv19NNPa8SIEQoNDdW4ceP0n//8J1c5s1gs2rZtmyTZ5qfv2bNHnTp10qZNmxQdHa2RI0cqNDRUkyZN0osvvmj78rB9+3a9+OKL8vX11ZAhQzRs2DBJ0ssvv6w1a9ZkuL2oqCg9++yzkqTo6GhNnDjxjrGNGDFCY8eOVUhIiIYPH65u3brpl19+UXR0tH777Te7dY8fP64+ffqoatWqGjVqlOrXr6/PP/9cr732Wq7yAwBZxRx5AF7jkUce0cqVKxUTE6P//ve/at26da76s1qtGjt2rIKDg/Xll1+qUKFCkqS2bduqZcuWmjNnjmbNmpXufitXrtSPP/6oiRMn2s0hb9eunTp37qypU6dq3LhxunTpkt5++22VL19eK1asUGBgoCSpe/fu6tq1q9599121adNGoaGhatq0qaZMmaLw8PA7zos/dOiQli5dqnbt2mny5Mm25TVr1tTo0aPt1h07dqwCAgL01Vdf2b4UdOvWTRMmTNCCBQvUoUMH3X///XfNj8ViUVxcnO16cnKyTpw4oY8++kh//fWX2rVrZ5uj/uabb+r69ev68ssvVbVqVdv2Xn/9dS1btkxr165VmzZt9O233yolJUUzZsywxdW+fXt17txZ+/btU5s2bdLFUa1aNdWtW1cLFy5U7dq175ifLVu26Ouvv1a7du307rvv2n416Nixox599FH95z//0apVq2zrnzt3Tm+99ZY6deokSerSpYtOnTql9evX6+rVq8qfP/9d8wMAucWIPACv8tprr6lAgQIaO3asEhISctVXbGysTp8+rc6dO9uKeEkqVqyYPvnkkzuO/K9du1YBAQFq3Lix4uLibJeSJUuqWrVqiomJkXSjsExMTFSPHj1sRbwkBQQEqHfv3kpOTtaGDRuyHO/GjRtlsVj01FNP2S3v2LGjgoKCbNcvXryon3/+WY0aNZIkuxhvFso3Y7ybv//+Ww0aNLBdmjRpoqeeekobN25UdHS0xo0bJ+nGGXd+++03RUVF2Yr4m25OiVm3bp0kqWTJkpJuFP5//PGHLBaLAgMDtXr1ag0ePDjLucjIzW38+9//tjsgOjQ0VI899pj279+vQ4cO2Zb7+Piobdu2dn3UqFFDKSkpTK8B4BKMyAPwKqVLl9aQIUP01ltvadKkSRo7dmyO+7p5FpTy5cunu+3mPOyMHDt2TNevX1fDhg3vuM61a9ds/YeFhaW7/eaytGdiuZvjx49LkipUqGC33M/PTxUrVtTVq1dt61mtVn311Vf66quvMuzr1KlTmW4vJCREkyZNsttO4cKFValSJQUEBNiWnzx50m6fble8eHEVLlzYtp/du3fXli1btGbNGq1Zs0ZBQUFq3LixHn30UT300EOZxnQ3J06ckJ+fX4aP5+35rlSpkqQbB+0WKFDAbr2bp7xMO68fAJyBQh6A1+nevbtWrVql5cuX67HHHsvy/W4/MFO6VazlzZs3W9u3WCwqXrz4Xedq+/v72+aFZ3S6zJxs+2Y/165dyzCmtO3HH3/8jvm50xz82wUEBNz1y0ra7d3ptKAWi8W2n4GBgVq4cKF27dql77//3lbUr1q1Sl27ds3V8Q8Wi+WuMUj2+fb15UdtAMbiXQiA1/H19dXYsWPl7++vMWPGKCkpKd3tktItv3Dhgt310qVLS5KOHj2abhtz5syxTR1Jq0yZMoqPj9f999+vhg0b2l2SkpLk7+8vf39/lS1bVpJ04MCBdH0cPHhQklSqVKms7LIkqVy5cpJunFP9dlar1TZafzM+6Ubxmja+GjVqKCEhId1IdG7cnCef0X6eOXNGV65csU2pOX78uH799VdFRkbqhRde0CeffKJNmzapWrVq+vTTT3X58uVcxZGSkpLh45mTfAOAs1HIA/BK4eHh6tWrlw4fPmw371m6MZ1Dknbv3m23/PYDHaUbZ1wpXry4vvzySyUmJtqWx8XFad68eTpy5EiG246KilJycrI++OADu+V//vmn+vfvb1veqFEjFShQQAsXLrTr//r165o/f778/f3VtGlTSbe+fNw+sp5WixYt5O/vn+6UjitXrrQ7KLV48eKqXbu21qxZYytgb5o2bZpefPFF7dy5847bya5ixYqpTp06Wrdunf766y+722bOnGmLXZLeffddPffcc3an6QwJCVGZMmXk6+t7x1HyrOTn5p9IzZw50+4Um8ePH9c333yjypUrZzjtBgCMwtQaAF5rwIABWrt2bbqCu169eipVqpTt9I6hoaHasGFDupHaPHnyaMyYMRo8eLCeeOIJderUSf7+/lq2bJmSkpJsp0ZM64knntCqVas0Y8YMHThwQPXr19fZs2e1dOlSBQYG2u5XpEgRDR8+XK+99po6duyoJ554Qn5+fvrqq6/0119/acSIEbZ/RS1WrJgk6fvvv1fp0qXVqlWrdNsNDQ1V//79NW3aND377LN6+OGHdezYMX3yySd2B7tK0pgxY/T0008rOjpaTz31lMqUKaOtW7dqzZo1atSoUa7P+JPW6NGjbedm79atm0qUKKFNmzZp48aNat68uR5++GFJUs+ePRUTE6Pu3burc+fOKlKkiH799VfFxMQoOjra7qDg24WEhEi68aXFarXq8ccfT7dO48aN1a5dO61atUpxcXFq0aKF4uLitGTJEkk3DrAFAHdCIQ/Aa+XNm1djx47VM888Y7f85qj1O++8oyVLlthGvhctWqTGjRvbrdu6dWvNnz9fM2fO1IwZM5Q3b17de++9mjp16h0PeM2TJ4/mzZunOXPmaNWqVfr+++8VFBSk+vXra9CgQapSpYpt3a5du6pEiRKaO3euZs6cKT8/P9WoUUOzZ89Ws2bNbOuFhIRo4MCBWrRokcaNG2ebRpPWwIEDVbJkSS1cuFDvvPOOypQpo3feeUeLFi3SP//8Y1svMjJSy5cv1/Tp0/XZZ58pMTFRpUuX1qBBg9SrVy/5+zv24yMyMlKfffaZpk2bpk8//VRXr15V+fLlNXLkSD399NO2uev33nuvFixYoNmzZ2vBggW6fPmyQkND9dJLL+m55567Y/81a9ZUly5dtGrVKu3cuVP16tXLcL2JEycqMjJSX3zxhSZMmKBChQqpQYMGGjBggN3jAgDuwMfqiL/oAwAAAOBSzJEHAAAATIhCHgAAADAhCnkAAADAhCjkAQAAABOikAcAAABMiEIeAAAAMCEKeQAAAMCEKOQBAAAAE6KQBwAAAEyIQh4AAAAwIQp5AAAAwIQo5AEAAAATopAHAAAATIhCHgAAADAhCnkAAADAhCjkAQAAABP6fxeeOpSXPdsVAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "my_data = pd.DataFrame({\n", " \"Nucleotide\": np.arange(1, 161), # positions 1 through 160\n", " \"Sequence\": [nt for nt in \"AUGC\"*40], # AUGC repeating 40 times (160 nts total)\n", " \"Values\": np.random.rand(160) * 5, # 160 random values between 0 and 5\n", " \"Errors\": np.random.rand(160) / 2, # 160 random values between 0 and 0.5\n", " \"Values_2\": np.random.rand(160) * 11 // 1, # 160 random integer values between 0 and 10\n", "})\n", "\n", "test = rnav.Sample(\n", " sample=\"test\",\n", " my_profile=rnav.data.Profile(\n", " input_data=my_data,\n", " metric=\"Values\",\n", " metric_defaults={\n", " \"Values\": {\n", " \"metric_column\": \"Values\",\n", " \"error_column\": \"Errors\",\n", " \"title\": \"my calculations\",\n", " \"cmap\": \"Greens\",\n", " \"normalization\": \"min_max\",\n", " \"values\": [1, 4],\n", " \"ticks\": [1, 2, 3, 4],\n", " \"extend\": \"both\",\n", " \"alpha\": 1,\n", " },\n", " \"Values_2\": {\n", " \"metric_column\": \"Values_2\",\n", " \"error_column\": None,\n", " \"title\": \"my other calculations\",\n", " \"cmap\": [\"grey\", \"black\", \"purple\", \"blue\", \"cyan\"],\n", " \"normalization\": \"bins\",\n", " \"values\": [2, 4, 6, 8],\n", " \"extend\": \"both\",\n", " \"alpha\": 1,\n", " }\n", " }\n", " )\n", ")\n", "\n", "plot = rnav.plot_profile(\n", " samples=[test],\n", " profile=\"my_profile\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Having defined how to represent \"Value\" and \"Value_2\", I can easily toggle between them by setting the metric value." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Warning: seq-object missing expected error column\n" ] }, { "data": { "image/png": "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6chPemrnA7q/abgeaX6be2Ok/2G/buupw/10f51C7teRwxj3Vi8gBRa079+ytiSbVVdm5n4Mj/WCftJP+kk/6Sf9pJ/08xbpp2w2qdUAj1+zT9i/SY0aNSRJu3fvztX+sbGxkqTly5cbVlN+GTOvvctKfjl2+un/Y9JP+unPY9JP+unPY9JP/++nM6a6jAcAAADAXwj7AAAAgEkR9gEAAACTIuwDAAAAJkXYBwAAAEyKu/HcxBffkDYLemcs+mks+mks+mks+mks+mks+mks7sYDAAAAwDCEfQAAAMCkuIwHAAAAMCk+2QcAAABMirAPAAAAmBRhHwAAADApwj4AAABgUoR9AAAAwKQI+wAAAIBJEfYBAAAAkyLsZ3D58mW1bNlSixcv9nUpfsdqter9999Xx44dVbduXTVv3lwvvviizpw5Y9/mypUrmjRpku677z7VqlVLnTt31v/+9z8fVp1/zJw5U1FRUTp27Jh9Gf10388//6wBAwaoXr16uueeezRgwAD9+uuv9vX01D1ffPGFunbtqrp166pFixaaOHGiLl++bF9PP53L7n3F1d5t375d3bp1U506ddS4cWNNmDBBycnJ3irf72TXzyNHjujZZ59V06ZNVbduXT366KNat25dpv3ppyNXck9iYqKaNGmiUaNGZVpHPx1l18+0tDTNnj1bMTExqlmzpmJiYjR37lxZrVaH7TzRT8L+TRITE9W/f3+HsIW/zJkzR+PGjdO9996rWbNmaciQIfrqq68UGxtrf/MfMWKEVq5cqcGDB2vGjBkqVqyYBg4cqO+//963xfu5H3/8UXPmzMm0nH66Z+/everRo4cuX76sadOmaeLEiTp58qT69Omjs2fPSqKn7ti2bZsGDRqkEiVKKD4+XnFxcVq9erWeeuop3fh7jPQzZzm9r7jSux9//FEDBgxQyZIlNWPGDA0cOFAffvihnnvuOS8ehf/Irp/nzp1T9+7dtX//fo0cOVLx8fGKiorS8OHDtWDBAvt29NORq7ln9OjR9tfQm9FPRzn188UXX9ScOXPUpUsXzZ07V23bttX06dM1c+ZM+zYe66cNNqvVavvkk09s9913ny06OtpWrVo126JFi3xdll+5du2arVatWrZx48Y5LN+1a5etWrVqtiVLltj/++OPP7avT01NtbVr187Wt29fb5ecbyQnJ9seeOABW7NmzWzVqlWzHT161Gaz2ehnLjzxxBO2tm3b2q5du2ZfdvjwYVuTJk1sn3zyCT1107PPPmtr2LChQz+XLFliq1atmm3//v30MwfO3ldc7V3fvn1tbdq0saWnp9uXrV271latWjXbrl27vHIs/sBZP2fOnGmrXr267eTJkw779e3b19aoUSOHn+mne7nnvffes0VHR9tq165tGzlypMM6+nmds37u3LnTVq1aNdtHH33ksN/YsWNtXbp0sf/sqX7yyb6k48ePa8SIEWrcuLHmz5/v63L80sWLF9W5c2e1b9/eYXlkZKQk6dSpU9q6dassFotatmxpX2+xWBQTE6Pt27crJSXFqzXnF6+++qpCQkLUp08fh+X00z1JSUnatm2bHnvsMRUsWNC+vGLFivryyy/Vtm1beuqmlJQUFSpUyKGfJUqUkHS93/Qze87eV1zpXUpKir7++mu1atVKgYF/vV23atVKBQoU0ObNm71xKH7BWT8rVKigPn36qEyZMg7LIyMjde7cOaWmptLPm7iaew4dOqTJkydr3LhxCg4OdlhHP//irJ8bNmxQiRIl1LFjR4flL7/8st5//31Jnu0nYV9S8eLFtWHDBk2ePFlhYWG+LscvlSpVSmPHjtXdd9/tsHzDhg2SpKioKB04cEBlypRRSEiIwzYRERFKS0vT4cOHvVZvfpGQkKDVq1dr6tSpslgsDuvop3v27dsnq9WqcuXKaezYsYqOjlaNGjXUr18//f7775Loqbt69eqls2fPKj4+XhcuXNC+ffs0a9YsRUZGqnbt2vQzB87eV1zp3dGjR5WamqrKlSs7bBMcHKwyZcro4MGDnjwEv+Ksn506ddKIESMclqWkpOjzzz9XlSpVVKBAAfp5E1dyT1pamp5//nm1atVKbdq0ybSefv7FWT9/+eUXVatWTZ9//rk6deqk6tWrq1mzZg6/GHiyn4R9SaGhoapYsaKvy8h3fvvtN02dOlXVqlXTAw88oEuXLqlo0aKZtgsNDZUkXbp0ydsl+rWzZ89qzJgxeuaZZ3TnnXdmWk8/3XPjetJx48bp8uXL+ve//63Jkyfr8OHD6tGjh86cOUNP3RQdHa2hQ4dq1qxZio6O1kMPPaTk5GS99dZbKlCgAP3MgbP3FVd6d/HiRUnKdrubvyhtdrl5n37llVd05MgRDR06VJLo501c6eesWbN0+vRpjR07Nsv19PMvzvp57tw5HThwQGPHjlW3bt00b948xcTEaMqUKXr99dclebafFuebAJnt2bNHcXFxCg4O1syZM2WxWGSz2RQQEJDtPkFBQV6s0P+NHj1aVatWzXT5zg300z2pqamSpEqVKmn69On25X/729/Uvn17LV68mJ666eWXX9ayZcv0xBNPqFmzZjp79qzmzJmj3r17a+nSpfQzD1zpXXp6eo5j3Py/+vGX9PR0jR8/XsuXL1f//v3Vrl07SbJ/qTw79PMv33//vd566y3NnTtXt912W5bb0E/Xpaam6syZM1q4cKEaNGggSWrUqJHOnz+vefPmqW/fvh7tJ48E3Pbpp5+qZ8+eCgkJ0eLFixURESHp+m+jWf3meeOWUUWKFPFqnf5s2bJl+vbbb/XKK6/IarUqLS3Nfvstq9Wq9PR0+ummG/1o3ry5w/LIyEjdcccd2rNnDz11w6lTp7R06VL16NFDI0eOVMOGDdW+fXstWLBAiYmJmj17Nv3MA1d6dyNkZbddVp8A3uouXbqkgQMHavny5XryySf1/PPP29fRT9ckJyfr+eefV9euXRUdHa20tDSlpaVJuh7w09LSZLPZ6KcbihQpotDQUHvQv6Fp06a6du2aDhw44NF+Evbhlnnz5umpp55S1apVtXz5cnvQl6QqVaro5MmTunbtmsM+hw4dUnBwsMLDw71drt9at26dkpOTFRMTo+rVq6t69ep65ZVXJEkxMTHq06cP/XRTpUqVJCnLL4WmpqYqJCSEnrrhxIkTstlsmb6nU6pUKVWuXFn79++nn3ngSu8qVqwoi8WS6bsP165d06lTp+w3SMB1f/zxh2JjY7Vt2zZNmDBBTz/9tMN6+uma3bt368iRI1qyZIn9/al69epKSkrSqlWrVL16dX3zzTf00w2VKlVSenq6/ZemG278H+lChQp5tJ+Efbhs8eLFmjp1qpo3b65FixapZMmSDuubNm2q1NRUbdq0yb4sLS1NmzZtUsOGDR3u6HGrGz9+vFasWOHwr1+/fpKu/z2D8ePH0083RUZGKiIiQp988onD5Q979uzRyZMnVb9+fXrqhoiICFksFu3cudNheWJiog4dOqTw8HD6mQeu9K5gwYJq2LChNm7c6BASNm7cqNTUVDVt2tQXpfulixcv6vHHH9cff/yhN998U127ds20Df10TfXq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denSRTNmzNDEiRN14cIFvfrqq4qIiNDKlSsVGhoqSerZs6e6deum1157TW3atFF4eLiaNWum6dOnKyoqKtvr9A8ePKilS5eqffv2mjZtmn15zZo1NWbMGIdtJ0yYoODgYK1atcr+i0OPHj00efJkvfPOO+rUqZPuvvvuHPtjtVqVmJho/zk1NVXHjh3Tu+++q3379ql9+/b2a+ZffvllXbt2TR999JGqVatmn2/cuHFatmyZNmzYoDZt2uiTTz5RWlqaZs2aZa+rY8eO6tKli3799Ve1adMmUx133XWXoqOjtWDBAtWpUyfb/nz11VdavXq12rdvr9dee83+fx8eeeQRPfTQQ/rnP/+ptWvX2rc/c+aMXnnlFXXu3FmS1LVrV504cUKbNm3SlStXFBISkmN/ACCv+GQfADJ46aWXVLhwYU2YMEEXL17M01h79uzRyZMn1aVLF3vQl6SSJUvqvffey/b/IGzYsEHBwcG69957lZiYaP9XtmxZ3XXXXUpISJB0PXwmJyerT58+9qAvScHBwerfv79SU1P1+eefu1zv5s2bZbVa1b17d4fljzzyiMLCwuw/nz9/Xt98842aNGkiSQ413gjTN2rMyR9//KFGjRrZ/zVt2lTdu3fX5s2bFRsbq4kTJ0q6fieh7777TjExMfagf8ONy282btwoSSpbtqyk678c/PDDD7JarQoNDdW6dev0zDPPuNyLrNyY48knn3T4End4eLg6dOig/fv36+DBg/blAQEBatu2rcMYf//735WWlsalPAC8gk/2ASCD8uXLa/jw4XrllVc0depUTZgwIddj3bi7S0RERKZ1N64Lz8qRI0d07do1NW7cONttrl69ah8/MjIy0/obyzLeYSYnR48elSRVqlTJYXlQUJAqV66sK1eu2Lez2WxatWqVVq1aleVYJ06ccDpfqVKlNHXqVId5brvtNlWpUkXBwcH25cePH3c4ppuVLl1at912m/04e/bsqa+++krr16/X+vXrFRYWpnvvvVcPPfSQ7r//fqc15eTYsWMKCgrK8vG8ud9VqlSRdP2LxoULF3bY7sbtPjN+zwAAPIGwDwBZ6Nmzp9auXasPPvhAHTp0cHm/m79MKv0V6AoWLOjW/FarVaVLl87x2nGLxWK/Tj2rW4XmZu4b41y9ejXLmjL+98MPP5xtf7L7TsDNgoODc/yFJuN82d0S1Wq12o8zNDRUCxYs0O7du/XZZ5/Zg//atWvVrVu3PH0fw2q15liD5NjvwED+BzoA3+JVCACyEBgYqAkTJshisWjs2LFKSUnJtF5SpuXnzp1z+Ll8+fKSpMOHD2eaY+7cufbLVDKqUKGCkpKSdPfdd6tx48YO/1JSUmSxWGSxWHTHHXdIkn777bdMYxw4cECSVK5cOVcOWZJUsWJFSdfvOX8zm81m/9T/Rn3S9YCbsb6///3vunjxYqZPtPPixnX7WR3nqVOndPnyZfvlO0ePHtXOnTtVo0YNPfXUU3rvvfe0ZcsW3XXXXVq+fLkuXbqUpzrS0tKyfDxz028A8DTCPgBkIyoqSv369dPvv//ucB22dP3SEUn6+eefHZbf/OVM6fqdZEqXLq2PPvpIycnJ9uWJiYmaP3++Dh06lOXcMTExSk1N1Ztvvumw/Mcff9TgwYPty5s0aaLChQtrwYIFDuNfu3ZNb7/9tiwWi5o1aybpr19Qbv6EPqOWLVvKYrFkup3lmjVrHL5IW7p0adWpU0fr16+3h9wb4uPj9fTTT+unn37Kdh53lSxZUnXr1tXGjRu1b98+h3WzZ8+21y5Jr732mp544gmHW5SWKlVKFSpUUGBgYLaftrvSnxt/iGv27NkOtxc9evSoPv74Y1WtWjXLS3wAwFe4jAcAcjBkyBBt2LAhUyhv0KCBypUrZ7+1ZXh4uD7//PNMn/gWKFBAY8eO1TPPPKNHH31UnTt3lsVi0bJly5SSkmK/LWRGjz76qNauXatZs2bpt99+U8OGDXX69GktXbpUoaGh9v2KFSumkSNH6qWXXtIjjzyiRx99VEFBQVq1apX27dunUaNG2f/6bMmSJSVJn332mcqXL68HHngg07zh4eEaPHiw4uPj9fjjj+vBBx/UkSNH9N577zl8QVeSxo4dq169eik2Nlbdu3dXhQoVtG3bNq1fv15NmjTJ852MMhozZoz93vU9evRQmTJltGXLFm3evFktWrTQgw8+KEnq27evEhIS1LNnT3Xp0kXFihXTzp07lZCQoNjYWIcvMt+sVKlSkq7/YmOz2fTwww9n2ubee+9V+/bttXbtWiUmJqply5ZKTEzUkiVLJF3/UjAA+BPCPgDkoGDBgpowYYJ69+7tsPzGp9//+te/tGTJEvsn6AsXLtS9997rsG3r1q319ttva/bs2Zo1a5YKFiyo2rVra8aMGdl+SbdAgQKaP3++5s6dq7Vr1+qzzz5TWFiYGjZsqGHDhunOO++0b9utWzeVKVNG8+bN0+zZsxUUFKS///3veuONN9S8eXP7dqVKldLQoUO1cOFCTZw40X7JTkZDhw5V2bJltWDBAv3rX/9ShQoV9K9//UsLFy7Un3/+ad+uRo0a+uCDDzRz5ky9//77Sk5OVvny5TVs2DD169dPFouxbzE1atTQ+++/r/j4eC1fvlxXrlxRRESEXnzxRfXq1ct+LX3t2rX1zjvv6I033tA777yjS5cuKTw8XM8995yeeOKJbMevWbOmunbtqrVr1+qnn35SgwYNstxuypQpqlGjhj788ENNnjxZRYsWVaNGjTRkyBCHxwUA/EGAzYg/cwgAAADA73DNPgAAAGBShH0AAADApAj7AAAAgEkR9gEAAACTIuwDAAAAJkXYBwAAAEyKsA8AAACYFGEfAAAAMCnCPgAAAGBShH0AAADApAj7AAAAgEkR9gEAAACTIuwDAAAAJkXYBwAAAEyKsA8AAACYFGEfAAAAMKn/A0K8phnPK5LqAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test.get_data(\"my_profile\").metric = \"Values_2\"\n", "\n", "plot2 = rnav.plot_profile(\n", " samples=[test],\n", " profile=\"my_profile\",\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A table-like data file\n", "----------------------\n", "\n", "Similar to the DataFrames described above, if a table-like data file follows this structure, it can be used to create a Profile directly.\n", "\n", "- one row per nucleotide\n", "- A column containing nucleotide positions\n", "- A column containing the nucleotide identities\n", "- Any number of additional columns\n", "\n", "I haven't yet made an example file to demonstrate this section, so you just have to trust me that this works.\n", "\n", "If we have a file with the following structure:\n", "\n", "- a multiline header to ignore\n", "- a 4-column comma-separated row of column names: pos, nt, x, and y\n", "- a 4-column comma-separated table of values (1 row per nucleotide)\n", "\n", "```\n", "# A multiline header\n", "# containing meta-data\n", "pos,nt,x,y\n", "1,A,0.5,9\n", "...and so on\n", "```\n", "\n", "This file can be coerced into the expected DataFrame format:\n", "```python\n", "my_data = pd.read_table(\n", " \"path/to/my_file.csv\",\n", " sep=\",\",\n", " comment=\"#\",\n", " header=0,\n", " names=[\"Nucleotide\", \"Sequence\", \"X_position\", \"Y_position\"]\n", ")\n", "```\n", "\n", "The Pandas function `pd.read_table` is a powerful method to coerce table-like files into DataFrames and has many options.\n", "`my_data` is now a DataFrame that can be used to create a profile in the method described earlier.\n", "\n", "RNAvigate also has a shortcut to turn this file directly into a Profile.\n", "This is accomplished by passing the necessary `read_table` arguments through the Profile constructor.\n", "\n", "```python\n", "test = rnav.Sample(\n", " sample=\"test\",\n", " my_profile=rnav.data.Profile(\n", " input_data=\"path/to/my_file.csv\",\n", " read_table_kw={\n", " \"sep\": \",\",\n", " \"comment\": \"#\",\n", " \"header\": 0,\n", " \"names\": [\"Nucleotide\", \"Sequence\", \"X_position\", \"Y_position\"]\n", " }\n", " )\n", ")\n", "```\n", "\n", "A non-table-like data file\n", "--------------------------\n", "\n", "This requires the use of Pandas to coerce the file into a suitable DataFrame.\n", "There are too many possibilities here for me to cover, so I will just suggest a few Google searches to get you started:\n", "\n", "- Google: \"pandas IO tools\" Pandas has built-in tools to read CSV, Fixed-width, JSON, HTML, XML, Excel, and many others.\n", "- Google: \"how do I turn _ into a pandas dataframe\" There is probably a good stack overflow answer out there.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" } }, "nbformat": 4, "nbformat_minor": 2 }