diff --git a/README.md b/README.md index 671e51f..aeffb0c 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ from matplotlib import pyplot em = wotplot.DotPlotMatrix(e1s, e2s, 20, verbose=True) # Visualize the matrix using matplotlib's spy() function +# This takes about 2 seconds on a laptop with 8 GB of RAM fig, ax = pyplot.subplots() wotplot.viz_spy( em, markersize=0.01, title="Comparison of two $E. coli$ genomes ($k$ = 20)", ax=ax diff --git a/docs/Tutorial.ipynb b/docs/Tutorial.ipynb index 88a7e9f..fcee6a1 100644 --- a/docs/Tutorial.ipynb +++ b/docs/Tutorial.ipynb @@ -335,14 +335,24 @@ "### 1.4.1. Available visualization functions\n", "Currently, we provide two functions for visualizing these matrices: `viz_imshow()` and `viz_spy()`. Both of these are essentially wrappers for matplotlib's [`imshow()`](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.imshow.html) and [`spy()`](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.spy.html) functions; you can even provide additional keyword arguments to `viz_imshow()` and `viz_spy()` which will be passed directly to `imshow()` / `spy()`. \n", "\n", - "A brief description of the differences between these functions:\n", + "A brief summary of (in my opinion) the most important differences between these functions:\n", "\n", - "- `imshow()` produces visually appealing plots (cells are scaled perfectly within the plot; supports multiple colors, which helps us visualize not-binary matrices). However, it doesn't support sparse matrices. So, `viz_imshow()` converts the sparse matrix to a dense format -- this can require a lot of memory if your input sequences were long.\n", + "- `imshow()`\n", + " - Draws zero and nonzero matrix cells as the same size, giving a \"perfect\" representation of the exact matrix.\n", + " - For small matrices (e.g. both sequences < 200 nt), this looks nice.\n", + " - For large matrices, the nonzero cells may be hard to see without enlarging the figure.\n", + " - Doesn't support sparse matrices.\n", + " - This means that `viz_imshow()` has to convert the sparse matrix to a dense format before calling `imshow()`. This will require a lot of memory if your matrix is large.\n", "\n", "\n", - "- `spy()` produces plots that are a bit less pretty than `imshow()`'s (at least at first -- you can still make them look nice with some tweaking, e.g. adjusting the `markersize` parameter to scale match cells' sizes up/down), but it works with sparse matrices and is thus much more memory-efficient.\n", + "- `spy()`\n", + " - Only draws nonzero matrix cells, meaning that the points representing each cell may cover other close-by cells in the matrix.\n", + " - You can increase / decrease nonzero cells' sizes as desired via the `markersize` parameter.\n", + " - For large matrices, this way of drawing things is actually nicer than the \"perfect\" representation offered by `imshow()` -- it makes nonzero cells much easier to see.\n", + " - Works with sparse matrices.\n", + " - This makes `viz_spy()` much more memory-efficient than `viz_imshow()`.\n", "\n", - "So, I recommend using `viz_imshow()` for short sequences (e.g. < 500 nt each) and `viz_spy()` for longer sequences.\n", + "In general, I recommend using `viz_imshow()` for small matrices (e.g. both sequences < 200 nt) and `viz_spy()` for large matrices.\n", "\n", "### 1.4.2. `viz_imshow()`\n", "\n", @@ -606,7 +616,7 @@ "id": "d4bfc908", "metadata": {}, "source": [ - "Note that `viz_spy()` can only use one color for all match cells (by default this color is set to black), so visualizing a `binary=False` matrix with `viz_spy()` doesn't look different from visualizing the equivalent `binary=True` (default) matrix: **TODO UPDATE DOCS HERE**" + "`viz_spy()` also works with `binary=False` matrices:" ] }, { @@ -724,7 +734,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 19, "id": "c6bd2bbe", "metadata": {}, "outputs": [ @@ -734,7 +744,7 @@ "Text(0, 0.5, '$s_3$ (21 nt) →')" ] }, - "execution_count": 38, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, @@ -838,7 +848,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEACAYAAACnJV25AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAP7klEQVR4nO3de5AlZXnH8e8P0EUgRFEsL0nAQinjLUQjFxUtQcWkUCBeKuYiG4x3olESrIgVNaZEK5aFlqgYCyVakShSrkZkBe8iEQoFoVDJcllUorULqNwKBJ780T04TobdPuf0zOy8fD9VU2dPd5+3n/ljf/POO91Pp6qQJLVju5UuQJI0LoNdkhpjsEtSYwx2SWqMwS5JjdlhpQu4d9bUjuy80mVI0pLZ+3E3jz7mBd+7dXNV7b7YvhUP9h3Zmf1y8EqXIUlLZv36C0cfc/sHb9h4d/tcipGkxhjsktQYg12SGmOwS1JjDHZJaozBLkmNMdglqTEGuyQ1xmCXpMYY7JLUGINdkhpjsEtSY1a8Cdhqsf6aC0cf85CH7DP6mJJms3r+r2+42z3O2CWpMQa7JDXGYJekxhjsktQYg12SGmOwS1JjDHZJaozBLkmNMdglqTEGuyQ1xmCXpMYY7JLUGJuADbQUTXxWT7Mhadvk/6HFOWOXpMYY7JLUGINdkhpjsEtSYwx2SWqMwS5JjTHYJakxBrskNcZgl6TGGOyS1BiDXZIaY7BLUmMMdklqjN0dV1ALXeSkoezEuHycsUtSYwx2SWqMwS5JjTHYJakxBrskNcZgl6TGGOyS1BiDXZIaY7BLUmMMdklqjMEuSY0x2CWpMTYBk7QsbNi1fJyxS1JjDHZJaozBLkmNmSnYk6xJ8rtjFSNJmt3UwZ5kJ+AsYEOSI8YrSZI0i6mCPckuwJnAU4B7Aaca7pK0bZg42PtQ/wKwL3AOUMA3MNwlaZswzYz9YOCPgBcAZ/fbngN8Ezh2pLokSVOa+AalqlqXZK+quibJ4/tttyQ5FFgzeoWSpIlMdedpVV2zyLZbgFtmrkiSNBOvY5ekxhjsktQYg12SGmOwS1JjDHZJaozBLkmNmTXY039JkrYRMwV7Vb2lqpz1S9I2xFCWpMYY7JLUGINdkhpjsEtSYwx2SWqMwS5JjTHYJakxU/VjT7I38GjggXSPxtsEXFJV/zNibZKkKQwO9iS/D7wCeD7woLnN/Wv1x/wM+CRwUlV9f8Q6JUkDbTXYk+wFvBM4gu4JSd8ATgIuB66lC/fdgIcD+wN/A/xtktOBN1TVFUtTulaz9ddcOPqYhzxkn9HHlFajITP2S4GLgbXA6VV105YOTrIz3az+tf1nd5yxRknSBIYE+wuq6rNDB+yD/xTglCSHTV2ZJGkqW70qZpJQX+Sz66b9rCRpOhNf7pjk5CT7bWH/vklOnq0sSdK0prmOfS2w1xb2Pww4cqpqJEkzW4oblHYGfrUE40qSBhh0HXuS3wP2nLfpkUmeusihuwGvBDbMXpokaRpDb1D6a+DNdDciFXBc/7VQgDv74yVJK2BosH8GuIouuE8GPgScu+CYAm4Ezq+qH41UnyRpQoOCvaouAi4CSLIH8OmqumQpC5MkTWfiJmBV9dalKESSNI5puzseABwNPAK4P79uBjanqmpLl0RKkpbIxMGe5MXAR+guabwMuHrsotS+pWjYNXZjMZuKabWaZsZ+HPBD4BlVdc3I9UiSZjTNDUp7AB8w1CVp2zRNsP8YWDN2IZKkcUwT7B8E/iLJ9mMXI0ma3TRr7BcAzwPOS3IicCVwx8KDqurrM9YmSZrCNMH+pXn//jD9807nSb/NGb0krYBpgt0+MJK0DZvmztNTlqIQSdI4lqIfuyRpBRnsktQYg12SGmOwS1JjDHZJasxUbXulbdHY3RjH7hYJdozU8pg52JOE7kHXOwAbqmrhDUuSpGU0eCkmyfFJrkvyoyRH9dsOBi4HNgA/ADYlefnSlCpJGmLQjD3JkcAb6PrCbAZOSrIZ+ATwU+DEfqzDgfcn+WlVrVuSiiVJWzR0KeZlwLeBA6vq9iTHA/8OfL/fdgtAkjcC3wFeBxjskrQChi7F7A18oqpu799/FNgVOHEu1AGq6ud0jcH2Ga9ESdIkhgb7GuDmee/n/n3dIsdeC9xnlqIkSdMbGuxXAfvNez/37yctcuyTgZ/NUJMkaQZD19hPBd6a5BfA/wLHApcBeyV5KXAaXf/1tcCfAx8bv1RJ0hBDg/09wB8Dr+/f/xx4CXAT8C26x+VB95CN64B/Hq9ESdIkBgV7Vd2U5Kl0SzC7Auf1fyglyX50V8E8BLgUOKGqrl6aciVJWzP4ztP+jtL/XmT7xcBRYxYlSZqeTcAkqTEGuyQ1ZvTujkn+Ejiqqg4ae2xpOS1FJ0Y7Rmo5LMWMfQ/gaUswriRpAJdiJKkxQ7s7XjHBmL89ZS2SpBEMXWPfE7geuGbAsTtNXY0kaWZDg/1KuqcjHbK1A5O8CXjrTFVJkqY2dI39AuDxA4/10XiStIKGBvt3gfsn2XPAsRuBr09dkSRpJoOCvaqOr6rtquqqAcd+vKqePnNlkqSpeLmjJDXGYJekxmw12JMcPO3gSZ4x7WclSdMZMmM/M8mXkxyaZPutHZzkXkmOSPI14IzZS5QkTWLIdex/CLwb+CywKcnZwHnA5XRPSwqwG/AIYH/gYOC+wBeBfUavWFrFVkvDLpuVrW5bDfaqugR4VpIDgFcBhwEv4v9frx7gl8DpwAeq6vyRa5UkDTDJE5TOBc7tl2OeADwK2J0u4DcBlwDfrao7l6JQSdIwE/djr6o76JZizhu/HEnSrLzcUZIaY7BLUmMMdklqjMEuSY0x2CWpMQa7JDXGYJekxowS7Emen+SEJEcl2WHBvs+PcQ5J0jAzB3uSo4H30T3E+h+Ac5LsNu+QA2c9hyRpuDFm7EcDh1TVy4DHAhcCX54X7hnhHJKkgSZuKbCIB1fVRQBVdTvw8iTvBr6S5CB8uLW06ixFJ0Y7Ri6fMWbsm5M8bP6Gqno98JX+a4wfHpKkgcYI9i8BaxdurKq/A74K7DjCOSRJA40xmz767sapqtckedcI55AkDTTxjD3J+5KcOfe+qm4DbkvyhCQPWnh8VV09Y42SpAlMsxTzdOCusE4SuiWX84AfJzl+nNIkSdOYZinmd4CL573/E+BJwMeBO4Fjk5xTVf81Qn2SpAlNE+wF3Dzv/WHAVcCRVVX99euvBQx2SVoB0yzFbKR73uncMsxzgHVVNXe9+vq5/ZKk5TfNjP2TwDFJzgD2Ax4InDFv/53Abot9UJK09KYJ9vcCLwS+SNcu4ELg7Hn7Hw5smrkySdJUJg72qrohyRPp1tbvC5w2bxmGfvtF45QnSZrUVDco9deuf2rh9iQPAL7Jb87gJUnLaNQ+LlW1mUXaC2hxNkXSPYmNxZaPT1CSpMYY7JLUGINdkhpjsEtSYwx2SWqMwS5JjTHYJakxBrskNcZgl6TGGOyS1BiDXZIaY7BLUmMMdklqzKjdHVtmFzlp22PHyMU5Y5ekxhjsktQYg12SGmOwS1JjDHZJaozBLkmNMdglqTEGuyQ1xmCXpMYY7JLUGINdkhpjsEtSYwx2SWpMk90dW+jOJmlltPB/3Rm7JDXGYJekxhjsktQYg12SGmOwS1JjDHZJaozBLkmNMdglqTEGuyQ1xmCXpMYY7JLUGINdkhqz4k3A9n7czaxff+GoY7bQxEeSpuWMXZIaY7BLUmMMdklqjMEuSY0x2CWpMQa7JDXGYJekxhjsktQYg12SGmOwS1JjDHZJaozBLkmNMdglqTGpqpUtINkEbFzRIiRp9dmjqnZfbMeKB7skaVwuxUhSYwx2SWqMwS5JjTHYJakxBrskNcZg16qT5DFJbk/yzJWuZQxJDktyW5JHrHQtaoPBrtXo3cA5VXXW/I1J/jHJp5JckaSSXLWlQZLskuSNSS5OckOSzUm+lWRtkoxZcJJ9krwlyZ4L91XVOuBi4J1jnlP3XAa7VpUkBwDPpAv3hd4OHARcDly/lXG2A74AvA04HzgG+Bdge+AjwDvGqxqAfYA3A3vezf73AEckefTI59U9kMGu1eZVwGbgjEX27VVV96+qZwLXbGWc/YCnAO+tqqOq6kNVdQJwIHAl8PIRax7idOBm4BXLfF41yGDX6JLsmuS4JN9L8oskv0xyaZITZxx3B+Bw4Oyq+tXC/VV1xQTD7dq//sYPgKq6je4Hx00D6lnbL/kclOTvk1ye5NYklyU5ct5xb6H7LQDgK/1nKslH5533RuAbwPMn+B62Vt/hSX5rrPG0euyw0gWoLUnW0AXUHnRhdimwE/BYYNY/Dj4B2AU4b8Zx6Mf4OXBsvxb/bbo6j+zPM8nM+e3AfYCTgFuBVwIfTbKhqs6hm40/GHhZf+z3+89dvmCcc4FDkjyyqn4wxfd0lyQPBU4FLkjy7Kq6YZbxtLoY7Brbc4HHAYdU1RdHHvtR/evCQJxYVV2f5LnAh4FPztt1A/C8qvrMBMOtAZ7Yz/ZJchpwBXA03R95v5fkXLpgP6uqvno348x9X48GZgr2qvpJkhcCnwK+0If7jbOMqdXDYNfY7te/7pvk7Kq6c8Sx5zrZXTfSeDcClwCfBb4F7Aa8GviPJIctvOpmC94/F+pwV6hexuS/oVzbvz5wawf2yztDnA88mS7cn1VVt0xYk1Yhg11jO43uD5xvA45O8jlgHXDGXMj3M8nX0F0psrmq9hw49lwr0pkvRUzyWLowf11VfXDe9k/Qhf2/Jdmrqu4YMNxia/vX0i1HTVRW/zqk5eqbJxx7f7ofGLbIvgfwj6caVVVdR7dG/WzgP+kuTfwc8M0k9+4Pux54H3DchMNv6l93G6HU1wE70i1V3KWqbgY+TxfKew4c6+7Cf9IfQHPf16YtHgVUVbb2BewMfBm4HXhRVRnq9xAGu0ZXVXdU1fqqei2wF/Bx4ADgD/r9Z1XVqUw+e7ykfx3jDs2H9q/bL7JvhwWvYxgyC394/3rJFo8aIMlOdD9Qn0oX6qfNOqZWD4Ndo0my+8I7NvuljDvogu0nM57iu8Av6ZYVZnVp/7p2/sYk9wUOo/utYsMI55kz94fLLf22sT/ws6r64QjnW0N3BZGhfg/kGrvG9C7gKUnW0YXidsAhwKHAv1bV1m4a2qKquiPJ6cDhSdZU1a3z9yf5K369rr07cO8kb+rfb6yqj807/ATgxcA7+vX2c+hC96V0lya+euD6+lDnA3cCxyW5H9118ldW1bf72nehuznq5DFO1l/1c8DIf7zWKmGwa0xfAh4AvJAuWK+jmxkf3vdDGcMH6GbZhwKfXrDvJcDTFmx7W//6NeCuYK+qjUn2Bf4JOBj4M+AW4ELgmKo6faR65853dZKjgDf038O9gFPorp8HeB7ddfQnjXhOQ/0eymeeasUkORw4YYKrYuY+dyawc1UduBR1rYQk3wGuqqo/XelatPq5xq5ll2T7JDvSzVqTZMf+jtWhjgEOSPKspalwefU/4B5DN5uXZuaMXcsuyVp+3TtlzsZJZ+6SFmewS1JjXIqRpMYY7JLUGINdkhpjsEtSYwx2SWqMwS5JjTHYJakx/wcqf8fkd5pEaQAAAABJRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -850,8 +860,9 @@ "source": [ "# - Set cmap to \"viridis\" (by default, viz_imshow() sets cmap to \"gray_r\" for binary matrices, but we can\n", "# override this here).\n", - "# - Set aspect to \"auto\", which lets cells be non-square (their dimensions will adjust as we resize the plot).\n", - "wotplot.viz_imshow(m, cmap=\"viridis\", aspect=\"auto\")" + "# - Set aspect to 0.5 (stretches out the x-axis; this can be useful if you're creating a dot plot where\n", + "# the sequence used for the x-axis is smaller than the sequence used for the y-axis).\n", + "wotplot.viz_imshow(m, cmap=\"viridis\", aspect=0.5)" ] }, { @@ -1020,12 +1031,12 @@ "metadata": {}, "outputs": [], "source": [ - "# Note that pyfaidx (https://github.com/mdshw5/pyfaidx), the library I use here to\n", + "# Note that pyfastx (https://github.com/lmdu/pyfastx), the library I use here to\n", "# load these FASTA files' sequences into memory, isn't included as a dependency of\n", "# wotplot; you can load your sequences however you'd like.\n", - "import pyfaidx\n", - "e1 = pyfaidx.Fasta(os.path.join(\"data\", \"ecoli_k12.fna\"))\n", - "e2 = pyfaidx.Fasta(os.path.join(\"data\", \"ecoli_o157h7.fna\"))" + "import pyfastx\n", + "e1 = pyfastx.Fasta(os.path.join(\"data\", \"ecoli_k12.fna\"))\n", + "e2 = pyfastx.Fasta(os.path.join(\"data\", \"ecoli_o157h7.fna\"))" ] }, { @@ -1035,11 +1046,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Extract the sequences from these pyfaidx.Fasta objects. (Both only contain\n", - "# one sequence / \"record\", hence the \"list(e1.records)[0]\" operations -- it's\n", - "# a way of saying \"give me the name of the only sequence in this FASTA file.\")\n", - "e1s = str(e1[list(e1.records)[0]])\n", - "e2s = str(e2[list(e2.records)[0]])" + "# Extract the sequences from these pyfastx.Fasta objects\n", + "e1s = str(e1[0])\n", + "e2s = str(e2[0])" ] }, { @@ -1074,17 +1083,17 @@ "text": [ "0.00s: validating inputs...\n", "0.39s: computing suffix array for s1...\n", - "0.66s: computing suffix array for s2...\n", + "0.67s: computing suffix array for s2...\n", "1.02s: finding forward matches between s1 and s2...\n", - "80.87s: found 3,357,713 forward match cell(s).\n", - "80.87s: computing ReverseComplement(s2)...\n", - "80.89s: computing suffix array for ReverseComplement(s2)...\n", - "81.21s: finding matches between s1 and ReverseComplement(s2)...\n", - "153.02s: found 3,536,693 total match cell(s).\n", - "153.02s: density = 0.00%.\n", - "153.02s: converting match information to COO format inputs...\n", - "155.20s: creating sparse matrix from COO format inputs...\n", - "156.49s: done creating the matrix.\n" + "79.83s: found 3,357,713 forward match cell(s).\n", + "79.83s: computing ReverseComplement(s2)...\n", + "79.85s: computing suffix array for ReverseComplement(s2)...\n", + "80.17s: finding matches between s1 and ReverseComplement(s2)...\n", + "150.27s: found 3,536,693 total match cell(s).\n", + "150.27s: density = 0.00%.\n", + "150.27s: converting match information to COO format inputs...\n", + "152.08s: creating sparse matrix from COO format inputs...\n", + "153.10s: done creating the matrix.\n" ] } ], @@ -1104,52 +1113,52 @@ }, { "cell_type": "code", - "execution_count": 27, - "id": "afd6818d", + "execution_count": 34, + "id": "59645c8a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'25,522,292,906,847 cells.'" + "(5498559, 4641633)" ] }, - "execution_count": 27, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "f\"{em.mat.shape[0] * em.mat.shape[1]:,} cells.\"" - ] - }, - { - "cell_type": "markdown", - "id": "9d928ba5", - "metadata": {}, - "source": [ - "Okay, so if we make the optimistic assumption that each cell in the matrix can be stored in a single bit (I don't think this is true even if the matrix is binary), then we'd still need ~3.19 terabytes (!!!) of memory to store the matrix in dense format. That's not happening on my laptop, so we'll have to use `viz_spy()`." + "em.mat.shape" ] }, { "cell_type": "code", - "execution_count": 28, - "id": "59645c8a", + "execution_count": 35, + "id": "afd6818d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(5498559, 4641633)" + "'The matrix has 25,522,292,906,847 cells.'" ] }, - "execution_count": 28, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "em.mat.shape" + "f\"The matrix has {em.mat.shape[0] * em.mat.shape[1]:,} cells.\"" + ] + }, + { + "cell_type": "markdown", + "id": "9d928ba5", + "metadata": {}, + "source": [ + "Okay, so if we make the optimistic assumption that each cell in the matrix can be stored in a single bit (I don't think this is true even if the matrix is binary), then we'd still need ~3.19 terabytes (!!!) of memory to store the matrix in dense format. That's not happening on my laptop, so we'll have to use `viz_spy()`." ] }, { @@ -1171,9 +1180,9 @@ "output_type": "stream", "text": [ "0.00s: Visualizing all match cells...\n", - "0.12s: Done visualizing all match cells.\n", - "0.12s: Slightly restyling visualization...\n", - "0.12s: Done.\n" + "0.14s: Done visualizing all match cells.\n", + "0.14s: Slightly restyling the visualization...\n", + "0.14s: Done.\n" ] }, { @@ -1229,18 +1238,18 @@ "output_type": "stream", "text": [ "0.00s: validating inputs...\n", - "0.50s: computing suffix array for s1...\n", - "0.84s: computing suffix array for s2...\n", - "1.28s: finding forward matches between s1 and s2...\n", - "82.77s: found 3,357,713 forward match cell(s).\n", - "82.77s: computing ReverseComplement(s2)...\n", - "82.79s: computing suffix array for ReverseComplement(s2)...\n", - "83.10s: finding matches between s1 and ReverseComplement(s2)...\n", - "157.06s: found 3,536,693 total match cell(s).\n", - "157.06s: density = 0.00%.\n", - "157.06s: converting match information to COO format inputs...\n", - "158.85s: creating sparse matrix from COO format inputs...\n", - "159.89s: done creating the matrix.\n" + "0.40s: computing suffix array for s1...\n", + "0.65s: computing suffix array for s2...\n", + "0.95s: finding forward matches between s1 and s2...\n", + "76.17s: found 3,357,713 forward match cell(s).\n", + "76.17s: computing ReverseComplement(s2)...\n", + "76.18s: computing suffix array for ReverseComplement(s2)...\n", + "76.60s: finding matches between s1 and ReverseComplement(s2)...\n", + "150.47s: found 3,536,693 total match cell(s).\n", + "150.47s: density = 0.00%.\n", + "150.47s: converting match information to COO format inputs...\n", + "152.23s: creating sparse matrix from COO format inputs...\n", + "153.24s: done creating the matrix.\n" ] } ], @@ -1250,7 +1259,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 36, "id": "8633bd1e", "metadata": {}, "outputs": [ @@ -1260,7 +1269,7 @@ "True" ] }, - "execution_count": 34, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1272,7 +1281,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 32, "id": "7bf44264", "metadata": {}, "outputs": [ @@ -1280,14 +1289,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.00s: Visualizing 1 cells...\n", - "0.76s: Done visualizing 1 cells.\n", - "0.76s: Visualizing -1 cells...\n", - "1.34s: Done visualizing -1 cells.\n", - "1.34s: Visualizing 2 cells...\n", - "1.92s: Done visualizing 2 cells.\n", - "1.92s: Slightly restyling visualization...\n", - "1.92s: Done.\n" + "0.00s: Visualizing \"1\" cells...\n", + "1.13s: Done visualizing \"1\" cells.\n", + "1.13s: Visualizing \"-1\" cells...\n", + "2.26s: Done visualizing \"-1\" cells.\n", + "2.26s: Visualizing \"2\" cells...\n", + "3.30s: Done visualizing \"2\" cells.\n", + "3.30s: Slightly restyling the visualization...\n", + "3.30s: Done.\n" ] }, { @@ -1319,66 +1328,6 @@ "source": [ "Visualizing this matrix took a little bit longer, but it looks pretty!" ] - }, - { - "cell_type": "markdown", - "id": "b75a393f", - "metadata": {}, - "source": [ - "As one final plot: we can use the `nbcmap` parameter of `viz_spy()` to update the color scheme and, again, get the legendary Dark Mode Dot Plots:" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "a03c168d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.00s: Setting background color to #000000...\n", - "0.00s: Done setting background color.\n", - "0.00s: Visualizing 1 cells...\n", - "0.73s: Done visualizing 1 cells.\n", - "0.73s: Visualizing -1 cells...\n", - "1.30s: Done visualizing -1 cells.\n", - "1.30s: Visualizing 2 cells...\n", - "1.90s: Done visualizing 2 cells.\n", - "1.90s: Slightly restyling visualization...\n", - "1.90s: Done.\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = pyplot.subplots()\n", - "wotplot.viz_spy(\n", - " em_nb, markersize=0.01, title=f\"Comparison of two $E. coli$ genomes ($k$ = {em.k})\", ax=ax, verbose=True,\n", - " nbcmap={0: \"#000000\", 1: \"#ffffff\", -1: \"#00ff00\", 2: \"#ff00ff\"}\n", - ")\n", - "ax.set_xlabel(f\"$E. coli$ K-12 substr. MG1655 ({len(e1s)/1e6:.2f} Mbp) \\u2192\")\n", - "ax.set_ylabel(f\"$E. coli$ O157:H7 str. Sakai ({len(e2s)/1e6:.2f} Mbp) \\u2192\")\n", - "fig.set_size_inches(8, 8)" - ] - }, - { - "cell_type": "markdown", - "id": "38b3092b", - "metadata": {}, - "source": [ - "... honestly, I like the original color scheme better :P" - ] } ], "metadata": {