{ "cells": [ { "cell_type": "markdown", "id": "enormous-wesley", "metadata": {}, "source": [ "# Pie Chart Stroke and Spacers\n", "\n", "The `stroke` and the `color` aesthetics respectively set **line width** and **line color** of the pie sector arcs. \n", "\n", "The `strokeSide` parameter - \"inner\", \"outer\"(def), \"both\" - specifies where to show the arc.\n", "\n", "By default `stroke` is 0, thus no arc is shown regardless of the value of `strokeSide` parameter.\n", "\n", "Parameters `spacerWidth` and `spacerColor` define lines between sectors.\n", "The default is a narrow segment of the same color as the plot background.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "minor-highway", "metadata": {}, "outputs": [ { "data": { "text/html": [ " <div id=\"dqfdew\"></div>\n", " <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n", " if(!window.letsPlotCallQueue) {\n", " window.letsPlotCallQueue = [];\n", " }; \n", " window.letsPlotCall = function(f) {\n", " window.letsPlotCallQueue.push(f);\n", " };\n", " (function() {\n", " var script = document.createElement(\"script\");\n", " script.type = \"text/javascript\";\n", " script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.0.0/js-package/distr/lets-plot.min.js\";\n", " script.onload = function() {\n", " window.letsPlotCall = function(f) {f();};\n", " window.letsPlotCallQueue.forEach(function(f) {f();});\n", " window.letsPlotCallQueue = [];\n", " \n", " \n", " };\n", " script.onerror = function(event) {\n", " window.letsPlotCall = function(f) {};\n", " window.letsPlotCallQueue = [];\n", " var div = document.createElement(\"div\");\n", " div.style.color = 'darkred';\n", " div.textContent = 'Error loading Lets-Plot JS';\n", " document.getElementById(\"dqfdew\").appendChild(div);\n", " };\n", " var e = document.getElementById(\"dqfdew\");\n", " e.appendChild(script);\n", " })();\n", " </script>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " <div id=\"kotlin_out_0\"/>\n", " <script type=\"text/javascript\">\n", " if(!window.kotlinQueues) {\n", " window.kotlinQueues = {};\n", " }\n", " if(!window.kotlinQueues[\"DataFrame\"]) {\n", " var resQueue = [];\n", " window.kotlinQueues[\"DataFrame\"] = resQueue;\n", " window[\"call_DataFrame\"] = function(f) {\n", " resQueue.push(f);\n", " }\n", " }\n", " (function (){\n", " var modifiers = [(function(script) {\n", " script.src = \"https://cdn.jsdelivr.net/gh/Kotlin/dataframe@3db46ccccaa1291c0627307d64133317f545e6ae/core/src/main/resources/init.js\"\n", " script.type = \"text/javascript\";\n", "})];\n", " var e = document.getElementById(\"kotlin_out_0\");\n", " modifiers.forEach(function (gen) {\n", " var script = document.createElement(\"script\");\n", " gen(script)\n", " script.addEventListener(\"load\", function() {\n", " window[\"call_DataFrame\"] = function(f) {f();};\n", " window.kotlinQueues[\"DataFrame\"].forEach(function(f) {f();});\n", " window.kotlinQueues[\"DataFrame\"] = [];\n", " }, false);\n", " script.addEventListener(\"error\", function() {\n", " window[\"call_DataFrame\"] = function(f) {};\n", " window.kotlinQueues[\"DataFrame\"] = [];\n", " var div = document.createElement(\"div\");\n", " div.style.color = 'darkred';\n", " div.textContent = 'Error loading resource DataFrame';\n", " document.getElementById(\"kotlin_out_0\").appendChild(div);\n", " }, false);\n", " \n", " e.appendChild(script);\n", " });\n", " })();\n", " </script>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " <style>\n", " :root {\n", " --background: #fff;\n", " --background-odd: #f5f5f5;\n", " --background-hover: #d9edfd;\n", " --header-text-color: #474747;\n", " --text-color: #848484;\n", " --text-color-dark: #000;\n", " --text-color-medium: #737373;\n", " --text-color-pale: #b3b3b3;\n", " --inner-border-color: #aaa;\n", " --bold-border-color: #000;\n", " --link-color: #296eaa;\n", " --link-color-pale: #296eaa;\n", " --link-hover: #1a466c;\n", "}\n", "\n", ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n", " --background: #303030;\n", " --background-odd: #3c3c3c;\n", " --background-hover: #464646;\n", " --header-text-color: #dddddd;\n", " --text-color: #b3b3b3;\n", " --text-color-dark: #dddddd;\n", " --text-color-medium: #b2b2b2;\n", " --text-color-pale: #737373;\n", " --inner-border-color: #707070;\n", " --bold-border-color: #777777;\n", " --link-color: #008dc0;\n", " --link-color-pale: #97e1fb;\n", " --link-hover: #00688e;\n", "}\n", "\n", "p.dataframe_description {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe {\n", " font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n", " font-size: 12px;\n", " background-color: var(--background);\n", " color: var(--text-color-dark);\n", " border: none;\n", " border-collapse: collapse;\n", "}\n", "\n", "table.dataframe th, td {\n", " padding: 6px;\n", " border: 1px solid transparent;\n", " text-align: left;\n", "}\n", "\n", "table.dataframe th {\n", " background-color: var(--background);\n", " color: var(--header-text-color);\n", "}\n", "\n", "table.dataframe td {\n", " vertical-align: top;\n", "}\n", "\n", "table.dataframe th.bottomBorder {\n", " border-bottom-color: var(--bold-border-color);\n", "}\n", "\n", "table.dataframe tbody > tr:nth-child(odd) {\n", " background: var(--background-odd);\n", "}\n", "\n", "table.dataframe tbody > tr:nth-child(even) {\n", " background: var(--background);\n", "}\n", "\n", "table.dataframe tbody > tr:hover {\n", " background: var(--background-hover);\n", "}\n", "\n", "table.dataframe a {\n", " cursor: pointer;\n", " color: var(--link-color);\n", " text-decoration: none;\n", "}\n", "\n", "table.dataframe tr:hover > td a {\n", " color: var(--link-color-pale);\n", "}\n", "\n", "table.dataframe a:hover {\n", " color: var(--link-hover);\n", " text-decoration: underline;\n", "}\n", "\n", "table.dataframe img {\n", " max-width: fit-content;\n", "}\n", "\n", "table.dataframe th.complex {\n", " background-color: var(--background);\n", " border: 1px solid var(--background);\n", "}\n", "\n", "table.dataframe .leftBorder {\n", " border-left-color: var(--inner-border-color);\n", "}\n", "\n", "table.dataframe .rightBorder {\n", " border-right-color: var(--inner-border-color);\n", "}\n", "\n", "table.dataframe .rightAlign {\n", " text-align: right;\n", "}\n", "\n", "table.dataframe .expanderSvg {\n", " width: 8px;\n", " height: 8px;\n", " margin-right: 3px;\n", "}\n", "\n", "table.dataframe .expander {\n", " display: flex;\n", " align-items: center;\n", "}\n", "\n", "/* formatting */\n", "\n", "table.dataframe .null {\n", " color: var(--text-color-pale);\n", "}\n", "\n", "table.dataframe .structural {\n", " color: var(--text-color-medium);\n", " font-weight: bold;\n", "}\n", "\n", "table.dataframe .dataFrameCaption {\n", " font-weight: bold;\n", "}\n", "\n", "table.dataframe .numbers {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe td:hover .formatted .structural, .null {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe tr:hover .formatted .structural, .null {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "\n", " </style>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%useLatestDescriptors\n", "%use lets-plot\n", "%use dataframe" ] }, { "cell_type": "code", "execution_count": 2, "id": "false-girlfriend", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Lets-Plot Kotlin API v.4.4.2. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.0.0." ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LetsPlot.getInfo()" ] }, { "cell_type": "code", "execution_count": 3, "id": "magnetic-blend", "metadata": {}, "outputs": [ { "data": { "application/kotlindataframe+json": "{\"nrow\":3,\"ncol\":12,\"columns\":[\"untitled\",\"manufacturer\",\"model\",\"displ\",\"year\",\"cyl\",\"trans\",\"drv\",\"cty\",\"hwy\",\"fl\",\"class\"],\"kotlin_dataframe\":[{\"untitled\":1,\"manufacturer\":\"audi\",\"model\":\"a4\",\"displ\":1.8,\"year\":1999,\"cyl\":4,\"trans\":\"auto(l5)\",\"drv\":\"f\",\"cty\":18,\"hwy\":29,\"fl\":\"p\",\"class\":\"compact\"},{\"untitled\":2,\"manufacturer\":\"audi\",\"model\":\"a4\",\"displ\":1.8,\"year\":1999,\"cyl\":4,\"trans\":\"manual(m5)\",\"drv\":\"f\",\"cty\":21,\"hwy\":29,\"fl\":\"p\",\"class\":\"compact\"},{\"untitled\":3,\"manufacturer\":\"audi\",\"model\":\"a4\",\"displ\":2.0,\"year\":2008,\"cyl\":4,\"trans\":\"manual(m6)\",\"drv\":\"f\",\"cty\":20,\"hwy\":31,\"fl\":\"p\",\"class\":\"compact\"}]}", "text/html": [ " <html>\n", " <head>\n", " <style type=\"text/css\">\n", " :root {\n", " --background: #fff;\n", " --background-odd: #f5f5f5;\n", " --background-hover: #d9edfd;\n", " --header-text-color: #474747;\n", " --text-color: #848484;\n", " --text-color-dark: #000;\n", " --text-color-medium: #737373;\n", " --text-color-pale: #b3b3b3;\n", " --inner-border-color: #aaa;\n", " --bold-border-color: #000;\n", " --link-color: #296eaa;\n", " --link-color-pale: #296eaa;\n", " --link-hover: #1a466c;\n", "}\n", "\n", ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n", " --background: #303030;\n", " --background-odd: #3c3c3c;\n", " --background-hover: #464646;\n", " --header-text-color: #dddddd;\n", " --text-color: #b3b3b3;\n", " --text-color-dark: #dddddd;\n", " --text-color-medium: #b2b2b2;\n", " --text-color-pale: #737373;\n", " --inner-border-color: #707070;\n", " --bold-border-color: #777777;\n", " --link-color: #008dc0;\n", " --link-color-pale: #97e1fb;\n", " --link-hover: #00688e;\n", "}\n", "\n", "p.dataframe_description {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe {\n", " font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n", " font-size: 12px;\n", " background-color: var(--background);\n", " color: var(--text-color-dark);\n", " border: none;\n", " border-collapse: collapse;\n", "}\n", "\n", "table.dataframe th, td {\n", " padding: 6px;\n", " border: 1px solid transparent;\n", " text-align: left;\n", "}\n", "\n", "table.dataframe th {\n", " background-color: var(--background);\n", " color: var(--header-text-color);\n", "}\n", "\n", "table.dataframe td {\n", " vertical-align: top;\n", "}\n", "\n", "table.dataframe th.bottomBorder {\n", " border-bottom-color: var(--bold-border-color);\n", "}\n", "\n", "table.dataframe tbody > tr:nth-child(odd) {\n", " background: var(--background-odd);\n", "}\n", "\n", "table.dataframe tbody > tr:nth-child(even) {\n", " background: var(--background);\n", "}\n", "\n", "table.dataframe tbody > tr:hover {\n", " background: var(--background-hover);\n", "}\n", "\n", "table.dataframe a {\n", " cursor: pointer;\n", " color: var(--link-color);\n", " text-decoration: none;\n", "}\n", "\n", "table.dataframe tr:hover > td a {\n", " color: var(--link-color-pale);\n", "}\n", "\n", "table.dataframe a:hover {\n", " color: var(--link-hover);\n", " text-decoration: underline;\n", "}\n", "\n", "table.dataframe img {\n", " max-width: fit-content;\n", "}\n", "\n", "table.dataframe th.complex {\n", " background-color: var(--background);\n", " border: 1px solid var(--background);\n", "}\n", "\n", "table.dataframe .leftBorder {\n", " border-left-color: var(--inner-border-color);\n", "}\n", "\n", "table.dataframe .rightBorder {\n", " border-right-color: var(--inner-border-color);\n", "}\n", "\n", "table.dataframe .rightAlign {\n", " text-align: right;\n", "}\n", "\n", "table.dataframe .expanderSvg {\n", " width: 8px;\n", " height: 8px;\n", " margin-right: 3px;\n", "}\n", "\n", "table.dataframe .expander {\n", " display: flex;\n", " align-items: center;\n", "}\n", "\n", "/* formatting */\n", "\n", "table.dataframe .null {\n", " color: var(--text-color-pale);\n", "}\n", "\n", "table.dataframe .structural {\n", " color: var(--text-color-medium);\n", " font-weight: bold;\n", "}\n", "\n", "table.dataframe .dataFrameCaption {\n", " font-weight: bold;\n", "}\n", "\n", "table.dataframe .numbers {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe td:hover .formatted .structural, .null {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe tr:hover .formatted .structural, .null {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "\n", "\n", "\n", " </style>\n", " </head>\n", " <body>\n", " \n", "<table class=\"dataframe\" id=\"df_436207616\"></table>\n", "\n", "<p class=\"dataframe_description\">DataFrame: rowsCount = 3, columnsCount = 12</p>\n", " </body>\n", " <script>\n", " \n", "/*<!--*/\n", "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: \"<span title=\\\"untitled: Int\\\">untitled</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">2</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">3</span></span>\"] }, \n", "{ name: \"<span title=\\\"manufacturer: String\\\">manufacturer</span>\", children: [], rightAlign: false, values: [\"audi\",\"audi\",\"audi\"] }, \n", "{ name: \"<span title=\\\"model: String\\\">model</span>\", children: [], rightAlign: false, values: [\"a4\",\"a4\",\"a4\"] }, \n", "{ name: \"<span title=\\\"displ: Double\\\">displ</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1.8</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1.8</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">2.0</span></span>\"] }, \n", "{ name: \"<span title=\\\"year: Int\\\">year</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1999</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1999</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">2008</span></span>\"] }, \n", "{ name: \"<span title=\\\"cyl: Int\\\">cyl</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">4</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">4</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">4</span></span>\"] }, \n", "{ name: \"<span title=\\\"trans: String\\\">trans</span>\", children: [], rightAlign: false, values: [\"auto(l5)\",\"manual(m5)\",\"manual(m6)\"] }, \n", "{ name: \"<span title=\\\"drv: String\\\">drv</span>\", children: [], rightAlign: false, values: [\"f\",\"f\",\"f\"] }, \n", "{ name: \"<span title=\\\"cty: Int\\\">cty</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">18</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">21</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">20</span></span>\"] }, \n", "{ name: \"<span title=\\\"hwy: Int\\\">hwy</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">29</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">29</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">31</span></span>\"] }, \n", "{ name: \"<span title=\\\"fl: String\\\">fl</span>\", children: [], rightAlign: false, values: [\"p\",\"p\",\"p\"] }, \n", "{ name: \"<span title=\\\"class: String\\\">class</span>\", children: [], rightAlign: false, values: [\"compact\",\"compact\",\"compact\"] }, \n", "], id: 436207616, rootId: 436207616, totalRows: 3 } ) });\n", "/*-->*/\n", "\n", "call_DataFrame(function() { DataFrame.renderTable(436207616) });\n", "\n", "\n", " </script>\n", " </html>" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "val mpg = DataFrame.readCSV(\"https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/mpg.csv\")\n", "mpg.head(3)" ] }, { "cell_type": "code", "execution_count": 4, "id": "framed-detroit", "metadata": {}, "outputs": [ { "data": { "text/html": [ " <div id=\"VlhUIG\"></div>\n", " <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", " (function() {\n", " var plotSpec={\n", "\"mapping\":{\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[],\n", "\"layers\":[{\n", "\"mapping\":{\n", "\"fill\":\"class\"\n", "},\n", "\"stat\":\"count2d\",\n", "\"size\":20.0,\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"data\":{\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "};\n", " var plotContainer = document.getElementById(\"VlhUIG\");\n", " window.letsPlotCall(function() {{\n", " LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", " }});\n", " })(); \n", " </script>" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letsPlot(mpg.toMap()) + \n", " geomPie(size = 20) {\n", " fill = \"class\"\n", " } + \n", " themeVoid()" ] }, { "cell_type": "markdown", "id": "adult-publisher", "metadata": {}, "source": [ "#### 1. `stroke` and `color`" ] }, { "cell_type": "code", "execution_count": 5, "id": "decreased-speaker", "metadata": {}, "outputs": [], "source": [ "val palettes = scaleFillBrewer(palette = \"Pastel2\") + \n", " scaleColorBrewer(palette = \"Set2\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "analyzed-avenue", "metadata": {}, "outputs": [ { "data": { "text/html": [ " <div id=\"pUeLqt\"></div>\n", " <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", " (function() {\n", " var plotSpec={\n", "\"mapping\":{\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[{\n", "\"aesthetic\":\"fill\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Pastel2\"\n", "},{\n", "\"aesthetic\":\"color\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Set2\"\n", "}],\n", "\"layers\":[{\n", "\"mapping\":{\n", "\"fill\":\"class\",\n", "\"color\":\"class\"\n", "},\n", "\"stat\":\"count2d\",\n", "\"size\":20.0,\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"stroke\":7.0,\n", "\"data\":{\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "};\n", " var plotContainer = document.getElementById(\"pUeLqt\");\n", " window.letsPlotCall(function() {{\n", " LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", " }});\n", " })(); \n", " </script>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letsPlot(mpg.toMap()) + \n", " geomPie(size = 20, stroke = 7) {\n", " fill = \"class\"\n", " color = \"class\"\n", " } +\n", " palettes +\n", " themeVoid()" ] }, { "cell_type": "markdown", "id": "joint-firmware", "metadata": {}, "source": [ "#### 2. `strokeSide`" ] }, { "cell_type": "markdown", "id": "novel-compensation", "metadata": {}, "source": [ "Note: `stroke=7` is added to parameters in order to make arks visible." ] }, { "cell_type": "code", "execution_count": 7, "id": "isolated-democracy", "metadata": {}, "outputs": [ { "data": { "text/html": [ " <div id=\"Ua1flh\"></div>\n", " <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", " (function() {\n", " var plotSpec={\n", "\"layout\":{\n", "\"name\":\"grid\",\n", "\"ncol\":3,\n", "\"nrow\":1,\n", "\"fit\":true,\n", "\"align\":false\n", "},\n", "\"figures\":[{\n", "\"ggtitle\":{\n", "\"text\":\"Outer stroke (Default)\"\n", "},\n", "\"mapping\":{\n", "\"color\":\"class\",\n", "\"fill\":\"class\"\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[{\n", "\"aesthetic\":\"fill\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Pastel2\"\n", "},{\n", "\"aesthetic\":\"color\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Set2\"\n", "}],\n", "\"layers\":[{\n", "\"hole\":0.3,\n", "\"mapping\":{\n", "},\n", "\"stat\":\"count2d\",\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"stroke\":7.0,\n", "\"data\":{\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "},{\n", "\"ggtitle\":{\n", "\"text\":\"Inner stroke\"\n", "},\n", "\"mapping\":{\n", "\"color\":\"class\",\n", "\"fill\":\"class\"\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[{\n", "\"aesthetic\":\"fill\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Pastel2\"\n", "},{\n", "\"aesthetic\":\"color\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Set2\"\n", "}],\n", "\"layers\":[{\n", "\"hole\":0.3,\n", "\"mapping\":{\n", "},\n", "\"stat\":\"count2d\",\n", "\"stroke_side\":\"Inner\",\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"stroke\":7.0,\n", "\"data\":{\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "},{\n", "\"ggtitle\":{\n", "\"text\":\"Inner & outer stroke\"\n", "},\n", "\"mapping\":{\n", "\"color\":\"class\",\n", "\"fill\":\"class\"\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[{\n", "\"aesthetic\":\"fill\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Pastel2\"\n", "},{\n", "\"aesthetic\":\"color\",\n", "\"scale_mapper_kind\":\"color_brewer\",\n", "\"palette\":\"Set2\"\n", "}],\n", "\"layers\":[{\n", "\"hole\":0.3,\n", "\"mapping\":{\n", "},\n", "\"stat\":\"count2d\",\n", "\"stroke_side\":\"both\",\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"stroke\":7.0,\n", "\"data\":{\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "}],\n", "\"ggsize\":{\n", "\"width\":1000.0,\n", "\"height\":200.0\n", "},\n", "\"kind\":\"subplots\"\n", "};\n", " var plotContainer = document.getElementById(\"Ua1flh\");\n", " window.letsPlotCall(function() {{\n", " LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", " }});\n", " })(); \n", " </script>" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "val p = letsPlot(mpg.toMap()) {\n", " fill = \"class\"\n", " color = \"class\"\n", "} + palettes + themeVoid()\n", "\n", "\n", "gggrid(listOf(\n", " p + geomPie(hole = 0.3, stroke = 7) + ggtitle(\"Outer stroke (Default)\"),\n", " p + geomPie(hole = 0.3, stroke = 7, strokeSide = \"Inner\") + ggtitle(\"Inner stroke\"),\n", " p + geomPie(hole = 0.3, stroke = 7, strokeSide = \"both\") + ggtitle(\"Inner & outer stroke\")\n", ")) + ggsize(1000, 200)" ] }, { "cell_type": "markdown", "id": "durable-growing", "metadata": {}, "source": [ "#### 3. `spacerWidth` and `spacerColor`" ] }, { "cell_type": "markdown", "id": "finished-watson", "metadata": {}, "source": [ "\"Spacer\" is a thin line separating the pie' slices.\\\n", "You can adjust width and color of spacers." ] }, { "cell_type": "code", "execution_count": 8, "id": "canadian-matter", "metadata": {}, "outputs": [ { "data": { "text/html": [ " <div id=\"U6FUkp\"></div>\n", " <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", " (function() {\n", " var plotSpec={\n", "\"mapping\":{\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[],\n", "\"layers\":[{\n", "\"hole\":0.3,\n", "\"mapping\":{\n", "\"fill\":\"class\"\n", "},\n", "\"stat\":\"count2d\",\n", "\"size\":20.0,\n", "\"spacer_color\":\"light-gray\",\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"spacer_width\":4.0,\n", "\"data\":{\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "};\n", " var plotContainer = document.getElementById(\"U6FUkp\");\n", " window.letsPlotCall(function() {{\n", " LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", " }});\n", " })(); \n", " </script>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letsPlot(mpg.toMap()) + \n", " geomPie(size = 20, hole = 0.3, spacerWidth = 4, spacerColor = \"light-gray\") {\n", " fill = \"class\"\n", " } +\n", " themeVoid()" ] }, { "cell_type": "markdown", "id": "velvet-possibility", "metadata": {}, "source": [ "##### 3.1 Spacers with Exploded Sectors \n", "\n", "Spacers are not shown for exploded sectors." ] }, { "cell_type": "code", "execution_count": 9, "id": "floral-captain", "metadata": {}, "outputs": [ { "data": { "application/kotlindataframe+json": "{\"nrow\":2,\"ncol\":13,\"columns\":[\"untitled\",\"manufacturer\",\"model\",\"displ\",\"year\",\"cyl\",\"trans\",\"drv\",\"cty\",\"hwy\",\"fl\",\"class\",\"explode\"],\"kotlin_dataframe\":[{\"untitled\":1,\"manufacturer\":\"audi\",\"model\":\"a4\",\"displ\":1.8,\"year\":1999,\"cyl\":4,\"trans\":\"auto(l5)\",\"drv\":\"f\",\"cty\":18,\"hwy\":29,\"fl\":\"p\",\"class\":\"compact\",\"explode\":0.0},{\"untitled\":2,\"manufacturer\":\"audi\",\"model\":\"a4\",\"displ\":1.8,\"year\":1999,\"cyl\":4,\"trans\":\"manual(m5)\",\"drv\":\"f\",\"cty\":21,\"hwy\":29,\"fl\":\"p\",\"class\":\"compact\",\"explode\":0.0}]}", "text/html": [ " <html>\n", " <head>\n", " <style type=\"text/css\">\n", " :root {\n", " --background: #fff;\n", " --background-odd: #f5f5f5;\n", " --background-hover: #d9edfd;\n", " --header-text-color: #474747;\n", " --text-color: #848484;\n", " --text-color-dark: #000;\n", " --text-color-medium: #737373;\n", " --text-color-pale: #b3b3b3;\n", " --inner-border-color: #aaa;\n", " --bold-border-color: #000;\n", " --link-color: #296eaa;\n", " --link-color-pale: #296eaa;\n", " --link-hover: #1a466c;\n", "}\n", "\n", ":root[theme=\"dark\"], :root [data-jp-theme-light=\"false\"], .dataframe_dark{\n", " --background: #303030;\n", " --background-odd: #3c3c3c;\n", " --background-hover: #464646;\n", " --header-text-color: #dddddd;\n", " --text-color: #b3b3b3;\n", " --text-color-dark: #dddddd;\n", " --text-color-medium: #b2b2b2;\n", " --text-color-pale: #737373;\n", " --inner-border-color: #707070;\n", " --bold-border-color: #777777;\n", " --link-color: #008dc0;\n", " --link-color-pale: #97e1fb;\n", " --link-hover: #00688e;\n", "}\n", "\n", "p.dataframe_description {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe {\n", " font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n", " font-size: 12px;\n", " background-color: var(--background);\n", " color: var(--text-color-dark);\n", " border: none;\n", " border-collapse: collapse;\n", "}\n", "\n", "table.dataframe th, td {\n", " padding: 6px;\n", " border: 1px solid transparent;\n", " text-align: left;\n", "}\n", "\n", "table.dataframe th {\n", " background-color: var(--background);\n", " color: var(--header-text-color);\n", "}\n", "\n", "table.dataframe td {\n", " vertical-align: top;\n", "}\n", "\n", "table.dataframe th.bottomBorder {\n", " border-bottom-color: var(--bold-border-color);\n", "}\n", "\n", "table.dataframe tbody > tr:nth-child(odd) {\n", " background: var(--background-odd);\n", "}\n", "\n", "table.dataframe tbody > tr:nth-child(even) {\n", " background: var(--background);\n", "}\n", "\n", "table.dataframe tbody > tr:hover {\n", " background: var(--background-hover);\n", "}\n", "\n", "table.dataframe a {\n", " cursor: pointer;\n", " color: var(--link-color);\n", " text-decoration: none;\n", "}\n", "\n", "table.dataframe tr:hover > td a {\n", " color: var(--link-color-pale);\n", "}\n", "\n", "table.dataframe a:hover {\n", " color: var(--link-hover);\n", " text-decoration: underline;\n", "}\n", "\n", "table.dataframe img {\n", " max-width: fit-content;\n", "}\n", "\n", "table.dataframe th.complex {\n", " background-color: var(--background);\n", " border: 1px solid var(--background);\n", "}\n", "\n", "table.dataframe .leftBorder {\n", " border-left-color: var(--inner-border-color);\n", "}\n", "\n", "table.dataframe .rightBorder {\n", " border-right-color: var(--inner-border-color);\n", "}\n", "\n", "table.dataframe .rightAlign {\n", " text-align: right;\n", "}\n", "\n", "table.dataframe .expanderSvg {\n", " width: 8px;\n", " height: 8px;\n", " margin-right: 3px;\n", "}\n", "\n", "table.dataframe .expander {\n", " display: flex;\n", " align-items: center;\n", "}\n", "\n", "/* formatting */\n", "\n", "table.dataframe .null {\n", " color: var(--text-color-pale);\n", "}\n", "\n", "table.dataframe .structural {\n", " color: var(--text-color-medium);\n", " font-weight: bold;\n", "}\n", "\n", "table.dataframe .dataFrameCaption {\n", " font-weight: bold;\n", "}\n", "\n", "table.dataframe .numbers {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe td:hover .formatted .structural, .null {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "table.dataframe tr:hover .formatted .structural, .null {\n", " color: var(--text-color-dark);\n", "}\n", "\n", "\n", "\n", "\n", " </style>\n", " </head>\n", " <body>\n", " \n", "<table class=\"dataframe\" id=\"df_436207617\"></table>\n", "\n", "<p class=\"dataframe_description\">DataFrame: rowsCount = 2, columnsCount = 13</p>\n", " </body>\n", " <script>\n", " \n", "/*<!--*/\n", "call_DataFrame(function() { DataFrame.addTable({ cols: [{ name: \"<span title=\\\"untitled: Int\\\">untitled</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">2</span></span>\"] }, \n", "{ name: \"<span title=\\\"manufacturer: String\\\">manufacturer</span>\", children: [], rightAlign: false, values: [\"audi\",\"audi\"] }, \n", "{ name: \"<span title=\\\"model: String\\\">model</span>\", children: [], rightAlign: false, values: [\"a4\",\"a4\"] }, \n", "{ name: \"<span title=\\\"displ: Double\\\">displ</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1.8</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1.8</span></span>\"] }, \n", "{ name: \"<span title=\\\"year: Int\\\">year</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1999</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">1999</span></span>\"] }, \n", "{ name: \"<span title=\\\"cyl: Int\\\">cyl</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">4</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">4</span></span>\"] }, \n", "{ name: \"<span title=\\\"trans: String\\\">trans</span>\", children: [], rightAlign: false, values: [\"auto(l5)\",\"manual(m5)\"] }, \n", "{ name: \"<span title=\\\"drv: String\\\">drv</span>\", children: [], rightAlign: false, values: [\"f\",\"f\"] }, \n", "{ name: \"<span title=\\\"cty: Int\\\">cty</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">18</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">21</span></span>\"] }, \n", "{ name: \"<span title=\\\"hwy: Int\\\">hwy</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">29</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">29</span></span>\"] }, \n", "{ name: \"<span title=\\\"fl: String\\\">fl</span>\", children: [], rightAlign: false, values: [\"p\",\"p\"] }, \n", "{ name: \"<span title=\\\"class: String\\\">class</span>\", children: [], rightAlign: false, values: [\"compact\",\"compact\"] }, \n", "{ name: \"<span title=\\\"explode: Double\\\">explode</span>\", children: [], rightAlign: true, values: [\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">0.0</span></span>\",\"<span class=\\\"formatted\\\" title=\\\"\\\"><span class=\\\"numbers\\\">0.0</span></span>\"] }, \n", "], id: 436207617, rootId: 436207617, totalRows: 2 } ) });\n", "/*-->*/\n", "\n", "call_DataFrame(function() { DataFrame.renderTable(436207617) });\n", "\n", "\n", " </script>\n", " </html>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "val mpg2 = mpg.add(\"explode\") { if(`class` == \"pickup\") 0.2 else 0.0}\n", "mpg2.head(2)" ] }, { "cell_type": "code", "execution_count": 10, "id": "intelligent-priority", "metadata": {}, "outputs": [ { "data": { "text/html": [ " <div id=\"mJ1A5q\"></div>\n", " <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", " (function() {\n", " var plotSpec={\n", "\"mapping\":{\n", "},\n", "\"data\":{\n", "},\n", "\"kind\":\"plot\",\n", "\"scales\":[],\n", "\"layers\":[{\n", "\"hole\":0.3,\n", "\"mapping\":{\n", "\"explode\":\"explode\",\n", "\"fill\":\"class\"\n", "},\n", "\"stat\":\"count2d\",\n", "\"size\":20.0,\n", "\"color\":\"black\",\n", "\"spacer_color\":\"light-gray\",\n", "\"stroke_side\":\"both\",\n", "\"position\":\"identity\",\n", "\"geom\":\"pie\",\n", "\"stroke\":2.0,\n", "\"spacer_width\":4.0,\n", "\"data\":{\n", "\"explode\":[0.0,0.0,0.0,0.0,0.0,0.2,0.0],\n", "\"..x..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"..count..\":[47.0,41.0,62.0,5.0,11.0,33.0,35.0],\n", "\"..y..\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", "\"class\":[\"compact\",\"midsize\",\"suv\",\"2seater\",\"minivan\",\"pickup\",\"subcompact\"]\n", "}\n", "}],\n", "\"theme\":{\n", "\"name\":\"classic\",\n", "\"rect\":{\n", "\"blank\":true\n", "},\n", "\"axis\":{\n", "\"blank\":true\n", "},\n", "\"line\":{\n", "\"blank\":true\n", "}\n", "}\n", "};\n", " var plotContainer = document.getElementById(\"mJ1A5q\");\n", " window.letsPlotCall(function() {{\n", " LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", " }});\n", " })(); \n", " </script>" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "letsPlot(mpg2.toMap()) + \n", " geomPie(size = 20, hole = 0.3,\n", " stroke = 2, color = \"black\",\n", " strokeSide = \"both\",\n", " spacerWidth = 4, spacerColor = \"light-gray\") {\n", " fill = \"class\"\n", " explode = \"explode\"\n", " } +\n", " themeVoid()" ] } ], "metadata": { "kernelspec": { "display_name": "Kotlin", "language": "kotlin", "name": "kotlin" }, "language_info": { "codemirror_mode": "text/x-kotlin", "file_extension": ".kt", "mimetype": "text/x-kotlin", "name": "kotlin", "nbconvert_exporter": "", "pygments_lexer": "kotlin", "version": "1.8.20" } }, "nbformat": 4, "nbformat_minor": 5 }