{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "46d761fc-6040-41c0-8dc2-fc4474f7c889", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "\n", "from lets_plot.mapping import as_discrete\n", "from lets_plot import *\n", "\n", "LetsPlot.setup_html()" ] }, { "cell_type": "code", "execution_count": 2, "id": "ede5b8cf-de2e-49c5-b1cb-9542ed2a17e8", "metadata": {}, "outputs": [], "source": [ "np.random.seed(1)\n", "\n", "n = 6\n", "x = list(range(n))\n", "y1 = np.random.rand(n)\n", "y2 = np.random.rand(n)\n", "v = np.random.choice(list('abc'), size=n)" ] }, { "cell_type": "markdown", "id": "8a06e44c-54a3-4773-8ae9-b320231e10e9", "metadata": {}, "source": [ "#### Short form" ] }, { "cell_type": "code", "execution_count": 3, "id": "54dc7f5b-bb1f-443b-b20a-104c81237cd7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_point(aes('x', 'y'), data={'x': x, 'y': y1}, color='red', shape=21, manual_key=\"Red zone\") + \\\n", " geom_line(aes('x', 'y'), data={'x': x, 'y': y2}, color='blue', linetype=2, manual_key=\"Blue zone\") + \\\n", " geom_rect(xmin=6, xmax=8, ymin=0.7, ymax=0.8, fill='green', alpha=0.2, manual_key=\"Green zone\") + \\\n", " geom_label(label=\"Text\", x=6, y=0.2, fill='orange', color='white', size=8, manual_key=\"Orange zone\")" ] }, { "cell_type": "markdown", "id": "2a692746-7ec6-4a45-9aaa-f5488c2b909d", "metadata": {}, "source": [ "#### Parameterized form\n", "\n", "`layer_key(label, group=None, index=None, **kwargs)`:\n", "\n", "- `label` - text in legend\n", "- `group` - the key by which items are combined into a legend group\n", "- `index` - to order items in legend group\n", "- `**kwargs` - aes values to override in the legend" ] }, { "cell_type": "code", "execution_count": 4, "id": "2253b109-538f-41be-9549-900c186afd3b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1 = ggplot() + \\\n", " geom_point(aes('x', 'y'), \n", " data={'x': x, 'y': y1}, \n", " color='red', shape=21, \n", " manual_key=layer_key(\"Red zone\")) + \\\n", " geom_line(aes('x', 'y'), \n", " data={'x': x, 'y': y2}, \n", " color='blue', linetype=2, \n", " manual_key=layer_key(\"Blue zone\")) + \\\n", " geom_rect(xmin=6, xmax=8, ymin=0.7, ymax=0.8, \n", " fill='green', alpha=0.2,\n", " manual_key=layer_key(\"Green zone\", alpha=1)) + \\\n", " geom_label(label=\"Text\", x=6, y=0.2, \n", " fill='orange', color='white', size=8, \n", " manual_key=layer_key(\"Orange zone\", color='black'))\n", "\n", "p1" ] }, { "cell_type": "markdown", "id": "cd95611f-92aa-429d-854d-fa63ea18e19b", "metadata": {}, "source": [ "Reorder using `index`:" ] }, { "cell_type": "code", "execution_count": 5, "id": "333aeb2f-576d-4abd-87eb-d0746d384276", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_point(aes('x', 'y'), \n", " data={'x': x, 'y': y1}, color='red', shape=21, \n", " manual_key=layer_key(\"Red zone\", index=1)) + \\\n", " geom_line(aes('x', 'y'), \n", " data={'x': x, 'y': y2}, color='blue', linetype=2, \n", " manual_key=layer_key(\"Blue zone\", index=3)) + \\\n", " geom_rect(xmin=6, xmax=8, ymin=0.7, ymax=0.8, \n", " fill='green', alpha=0.2,\n", " manual_key=layer_key(\"Green zone\", alpha=1, index=2)) + \\\n", " geom_label(label=\"Text\", x=6, y=0.2, \n", " fill='orange', color='white', size=8, \n", " manual_key=layer_key(\"Orange zone\", color='black', index=0))" ] }, { "cell_type": "markdown", "id": "0b5653c3-bd3c-49a7-9eee-454879229a5a", "metadata": {}, "source": [ "Use `group` to put items to different legend groups:" ] }, { "cell_type": "code", "execution_count": 6, "id": "9f9d4ff0-4e08-4269-b0a5-fb65b54df5d1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2 = ggplot() + \\\n", " geom_point(aes('x', 'y'), \n", " data={'x': x, 'y': y1}, \n", " color='red', shape=21, \n", " manual_key=layer_key(\"Red zone\", \"Group1\")) + \\\n", " geom_line(aes('x', 'y'), \n", " data={'x': x, 'y': y2}, \n", " color='blue', linetype=2, \n", " manual_key=layer_key(\"Blue zone\", \"Group1\")) + \\\n", " geom_rect(xmin=6, xmax=8, ymin=0.7, ymax=0.8, \n", " fill='green', alpha=0.2,\n", " manual_key=layer_key(\"Green zone\", \"Group2\", alpha=1)) + \\\n", " geom_label(label=\"Text\", x=6, y=0.2, \n", " fill='orange', color='white', size=8, \n", " manual_key=layer_key(\"Orange zone\", \"Group3\", color='black'))\n", "\n", "p2" ] }, { "cell_type": "markdown", "id": "981a8868-e5c4-4d74-86f9-dffb632514fe", "metadata": {}, "source": [ "#### Append items to existing legend" ] }, { "cell_type": "code", "execution_count": 7, "id": "3d052e45-18a7-44a3-88b0-f60c697c3ec5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# legend 'group' name = default title (variable name)\n", "\n", "p3 = ggplot() + \\\n", " geom_point(aes('x', 'y', \n", " color=as_discrete('x'), \n", " size='v'),\n", " data={'x': x, 'y': y1, 'v': v},\n", " manual_key=layer_key(\"point\", 'x', shape=21)) + \\\n", " geom_line(aes('x', 'y'),\n", " data={'x': x, 'y': y2},\n", " linetype=4, color='blue',\n", " manual_key=layer_key(\"line\", 'x'))\n", "\n", "p3 " ] }, { "cell_type": "code", "execution_count": 8, "id": "766b3eaf-5958-4416-9e89-f432eef1ed21", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Change titles for scales - will be combined, but custom legend still has 'x' name\n", "\n", "p3 + scale_color_discrete(name=\"My title\") + scale_size(name=\"My title\")" ] }, { "cell_type": "code", "execution_count": 9, "id": "a8403119-4d6c-49d5-9ed4-e54f6d7db544", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Change title for 'x'\n", "\n", "p3 + scale_color_discrete(name=\"My title\") + scale_size(name=\"My title\") + guides(x=guide_legend(\"My title\"))" ] }, { "cell_type": "markdown", "id": "3f171d27-8947-4a45-a3e0-58731f04d141", "metadata": {}, "source": [ "#### Title using `guides()`" ] }, { "cell_type": "code", "execution_count": 10, "id": "d2b26a96-aef7-421d-8079-e724db18ce41", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# default legend group - use key 'manual'\n", "\n", "p1 + guides(manual=guide_legend(title=\"Color zones\", nrow=2)) " ] }, { "cell_type": "code", "execution_count": 11, "id": "9d85e210-cd30-4ba3-b1e4-b9194420434b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# named legend groups\n", "\n", "p2 + guides(Group1=guide_legend(title=\"Zone 1\", ncol=2), \n", " Group2=guide_legend(title=\"Zone 2\"), \n", " Group3=guide_legend(title=\"Zone 3\"))" ] }, { "cell_type": "code", "execution_count": 12, "id": "a5af0837", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Hide legend group\n", "\n", "p2 + guides(Group1=guide_legend(title=\"Zone 1\", ncol=2), \n", " Group2=\"none\", \n", " Group3=guide_legend(title=\"Zone 3\"))" ] }, { "cell_type": "markdown", "id": "00d6ed05-b8e2-4017-bdde-7c52f08633d3", "metadata": {}, "source": [ "#### Title using `labs()`" ] }, { "cell_type": "code", "execution_count": 13, "id": "0645986b-dc50-4fcf-b058-6acd9e28ec85", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# default legend group in `labs()` - use key 'manual'\n", "\n", "p1 + labs(manual=\"Zones\") + guides(manual=guide_legend(ncol=2))" ] }, { "cell_type": "code", "execution_count": 14, "id": "118d568a-0c5c-4699-8b32-186952e5da91", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p2 + labs(Group1=\"Zone 1\", Group2=\"\")" ] }, { "cell_type": "markdown", "id": "d60b2436-35cc-41c1-aff9-2c334e0eeda6", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "Default legend group 'manual' and named group with specified empty title" ] }, { "cell_type": "code", "execution_count": 15, "id": "f12a3b31-13cc-47e9-9741-84245f681910", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " " ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ggplot() + \\\n", " geom_point(aes('x', 'y'), \n", " data={'x': x, 'y': y1}, \n", " color='red', shape=21, \n", " manual_key=layer_key(\"Red zone\")) + \\\n", " geom_line(aes('x', 'y'), \n", " data={'x': x, 'y': y2}, \n", " color='blue', linetype=2, \n", " manual_key=layer_key(\"Blue zone\", \"Group1\")) + \\\n", " guides(Group1=guide_legend(\"\"))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.11" } }, "nbformat": 4, "nbformat_minor": 5 }