source/kotlin_examples/cookbook/geom_pie.ipynb (7,084 lines of code) (raw):
{
"cells": [
{
"cell_type": "markdown",
"id": "d1f05540",
"metadata": {},
"source": [
"# geomPie()"
]
},
{
"cell_type": "markdown",
"id": "34f2ff62",
"metadata": {},
"source": [
"A pie chart is a circular statistical graphic, which is divided into slices to illustrate numerical proportion."
]
},
{
"cell_type": "markdown",
"id": "36044c48",
"metadata": {},
"source": [
"1. [Default presentation](#1.-Default-presentation)\n",
"\n",
" 1.1. [Basic pie chart](#1.1.-Basic-pie-chart)\n",
" \n",
" 1.2. [Improve appearance](#1.2.-Improve-appearance) \n",
" \n",
" 1.3. [Adding labels to pie sectors](#1.3.-Adding-labels-to-pie-sectors) \n",
" \n",
" 1.4. [Use \"count2d\" statistical transformation](#1.4.-Use-\"count2d\"-statistical-transformation)\n",
" \n",
" \n",
"2. [Pie size depending on data](#2.-Pie-size-depending-on-data)\n",
"\n",
" \n",
"3. [Explode](#3.-Explode)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "faa30d88",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:44.423420Z",
"iopub.status.busy": "2025-12-03T16:01:44.422046Z",
"iopub.status.idle": "2025-12-03T16:01:46.987117Z",
"shell.execute_reply": "2025-12-03T16:01:46.986581Z"
}
},
"outputs": [
{
"data": {
"text/html": [
" <div id=\"kotlin_out_0\"></div>\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",
" white-space: nowrap;\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"
},
{
"data": {
"text/html": [
" <div id=\"vbrZsM\"></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.8.1/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(\"vbrZsM\").appendChild(div);\n",
" };\n",
" var e = document.getElementById(\"vbrZsM\");\n",
" e.appendChild(script);\n",
" })();\n",
" </script>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" <div id=\"kotlin_out_1\"></div>\n",
" <script type=\"text/javascript\">\n",
" if(!window.kotlinQueues) {\n",
" window.kotlinQueues = {};\n",
" }\n",
" if(!window.kotlinQueues[\"letsPlotJs\"]) {\n",
" var resQueue = [];\n",
" window.kotlinQueues[\"letsPlotJs\"] = resQueue;\n",
" window[\"call_letsPlotJs\"] = function(f) {\n",
" resQueue.push(f);\n",
" }\n",
" }\n",
" (function (){\n",
" var modifiers = [(function(script) {\n",
" script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.8.1/js-package/distr/lets-plot.min.js\"\n",
" script.type = \"text/javascript\";\n",
"})];\n",
" var e = document.getElementById(\"kotlin_out_1\");\n",
" modifiers.forEach(function (gen) {\n",
" var script = document.createElement(\"script\");\n",
" gen(script)\n",
" script.addEventListener(\"load\", function() {\n",
" window[\"call_letsPlotJs\"] = function(f) {f();};\n",
" window.kotlinQueues[\"letsPlotJs\"].forEach(function(f) {f();});\n",
" window.kotlinQueues[\"letsPlotJs\"] = [];\n",
" }, false);\n",
" script.addEventListener(\"error\", function() {\n",
" window[\"call_letsPlotJs\"] = function(f) {};\n",
" window.kotlinQueues[\"letsPlotJs\"] = [];\n",
" var div = document.createElement(\"div\");\n",
" div.style.color = 'darkred';\n",
" div.textContent = 'Error loading resource letsPlotJs';\n",
" document.getElementById(\"kotlin_out_1\").appendChild(div);\n",
" }, false);\n",
" \n",
" e.appendChild(script);\n",
" });\n",
" })();\n",
" </script>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%useLatestDescriptors\n",
"%use dataframe\n",
"%use lets-plot"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8786a3e7",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:46.988623Z",
"iopub.status.busy": "2025-12-03T16:01:46.988373Z",
"iopub.status.idle": "2025-12-03T16:01:47.018804Z",
"shell.execute_reply": "2025-12-03T16:01:47.018881Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"Lets-Plot Kotlin API v.4.12.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.8.1.\n",
"Outputs: Web (HTML+JS), Kotlin Notebook (Swing), Static SVG (hidden)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"LetsPlot.getInfo()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "444122dd",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.021425Z",
"iopub.status.busy": "2025-12-03T16:01:47.020737Z",
"iopub.status.idle": "2025-12-03T16:01:47.084907Z",
"shell.execute_reply": "2025-12-03T16:01:47.084466Z"
}
},
"outputs": [],
"source": [
"val blankTheme = theme(line=elementBlank(), axis=elementBlank())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "42063da2",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.087436Z",
"iopub.status.busy": "2025-12-03T16:01:47.086864Z",
"iopub.status.idle": "2025-12-03T16:01:47.213629Z",
"shell.execute_reply": "2025-12-03T16:01:47.213343Z"
}
},
"outputs": [],
"source": [
"val (w, h) = 400 to 250\n",
"\n",
"val data = mapOf(\n",
" \"name\" to listOf('a', 'b', 'c', 'd', 'b'),\n",
" \"value\" to listOf(40, 90, 10, 50, 20)\n",
")\n",
"\n",
"val p = letsPlot(data) + ggsize(w,h)"
]
},
{
"cell_type": "markdown",
"id": "d3496545",
"metadata": {},
"source": [
"## 1. Default presentation"
]
},
{
"cell_type": "markdown",
"id": "e670679c",
"metadata": {},
"source": [
"### 1.1. Basic pie chart"
]
},
{
"cell_type": "markdown",
"id": "ae3a2237",
"metadata": {},
"source": [
"Use \"identity\" statistical transformation to leave the data unchanged."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8e854954",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.215343Z",
"iopub.status.busy": "2025-12-03T16:01:47.215093Z",
"iopub.status.idle": "2025-12-03T16:01:47.505070Z",
"shell.execute_reply": "2025-12-03T16:01:47.504889Z"
}
},
"outputs": [
{
"data": {
"text/html": [
" <div id=\"VUumvl\"></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.8.1/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(\"VUumvl\").appendChild(div);\n",
" };\n",
" var e = document.getElementById(\"VUumvl\");\n",
" e.appendChild(script);\n",
" })();\n",
" </script>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"name": [
"a",
"b",
"c",
"d",
"b"
],
"value": [
40.0,
90.0,
10.0,
50.0,
20.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "value",
"type": "int"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"geom": "pie",
"mapping": {
"fill": "name",
"slice": "value"
},
"position": "identity",
"stat": "identity"
}
],
"mapping": {},
"scales": []
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"7PTkuf\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"7PTkuf\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"name\":[\"a\",\"b\",\"c\",\"d\",\"b\"],\n",
"\"value\":[40.0,90.0,10.0,50.0,20.0]\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[],\n",
"\"layers\":[{\n",
"\"mapping\":{\n",
"\"slice\":\"value\",\n",
"\"fill\":\"name\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"value\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"1\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=db1b6b85-365b-46d6-9206-31482b275cf2 width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 250.0px;\" viewBox=\"0 0 400.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pPbLsI7 .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pPbLsI7 .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dXpm9pX .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dXpm9pX .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pPbLsI7 .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dXpm9pX .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dXpm9pX .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dXpm9pX .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pPbLsI7\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(21.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
" <g>\n",
" <line x1=\"29.124550581235383\" y1=\"0.0\" x2=\"29.124550581235383\" y2=\"204.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"87.37365174370616\" y1=\"0.0\" x2=\"87.37365174370616\" y2=\"204.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"145.62275290617694\" y1=\"0.0\" x2=\"145.62275290617694\" y2=\"204.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"203.87185406864774\" y1=\"0.0\" x2=\"203.87185406864774\" y2=\"204.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"262.1209552311185\" y1=\"0.0\" x2=\"262.1209552311185\" y2=\"204.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
" <g>\n",
" <line x1=\"0.0\" y1=\"183.60000000000002\" x2=\"291.2455058123539\" y2=\"183.60000000000002\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"142.8\" x2=\"291.2455058123539\" y2=\"142.8\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"102.0\" x2=\"291.2455058123539\" y2=\"102.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"61.199999999999996\" x2=\"291.2455058123539\" y2=\"61.199999999999996\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"20.39999999999999\" x2=\"291.2455058123539\" y2=\"20.39999999999999\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cbxSWnf)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (291.2455058123539, 204.0)]\">\n",
" <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L99.07906547396674 83.73294878168024 A50.0 50.0 0.0 0 1 145.62275290617694 52.0 L145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L145.62275290617694 52.0 A50.0 50.0 0.0 0 1 167.31693986205485 147.04844339512096 L145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L167.31693986205485 147.04844339512096 A50.0 50.0 0.0 0 1 153.07486621498566 151.44154131125643 L145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L153.07486621498566 151.44154131125643 A50.0 50.0 0.0 0 1 96.87635729708576 113.12604669781572 L145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L96.87635729708576 113.12604669781572 A50.0 50.0 0.0 0 1 99.07906547396672 83.73294878168028 L145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M99.07906547396674 83.73294878168024 A50.0 50.0 0.0 0 1 145.62275290617694 52.0 M145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 52.0 A50.0 50.0 0.0 0 1 167.31693986205485 147.04844339512096 M145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M167.31693986205485 147.04844339512096 A50.0 50.0 0.0 0 1 153.07486621498566 151.44154131125643 M145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M153.07486621498566 151.44154131125643 A50.0 50.0 0.0 0 1 96.87635729708576 113.12604669781572 M145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M96.87635729708576 113.12604669781572 A50.0 50.0 0.0 0 1 99.07906547396672 83.73294878168028 M145.62275290617694 102.0 A0.0 0.0 0.0 0 0 145.62275290617694 102.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L98.72998781822517 83.59594589754283 M145.62275290617694 102.0 L145.62275290617694 51.625 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L145.62275290617694 51.625 M145.62275290617694 102.0 L167.47964626422393 147.38630672058437 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L167.47964626422393 147.38630672058437 M145.62275290617694 102.0 L153.13075706480174 151.81235287109087 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L153.13075706480174 151.81235287109087 M145.62275290617694 102.0 L96.51075933001758 113.20949204804934 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.62275290617694 102.0 L96.51075933001758 113.20949204804934 M145.62275290617694 102.0 L98.72998781822514 83.59594589754288 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cbxSWnf\">\n",
" <rect x=\"31.015306675749617\" y=\"0.0\" width=\"291.2455058123539\" height=\"204.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(31.015306675749617 204.0 ) \">\n",
" <g transform=\"translate(29.124550581235383 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>-0.4</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(87.37365174370616 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>-0.2</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(145.62275290617694 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>0</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(203.87185406864774 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>0.2</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(262.1209552311185 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>0.4</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <line x1=\"0.0\" y1=\"0.0\" x2=\"291.2455058123539\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
" </line>\n",
" </g>\n",
" <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
" <g transform=\"translate(0.0 183.60000000000002 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>-0.4</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 142.8 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>-0.2</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 102.0 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>0</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 61.199999999999996 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>0.2</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 20.39999999999999 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>0.4</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(15.0 108.0 ) rotate(-90.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-y\" text-anchor=\"middle\">\n",
" <tspan>y</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(197.63805958192654 244.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-x\" text-anchor=\"middle\">\n",
" <tspan>x</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(346.2608124881035 45.75 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"124.5\" width=\"50.739187511896475\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>name</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(228,26,28)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(55,126,184)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 46.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(77,175,74)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 69.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(152,78,163)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>d</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dXpm9pX\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"db1b6b85-365b-46d6-9206-31482b275cf2\").style.display = \"none\";</script>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p + geomPie(stat = Stat.identity) { slice = \"value\"; fill = \"name\" }"
]
},
{
"cell_type": "markdown",
"id": "a6468831",
"metadata": {},
"source": [
"### 1.2. Improve appearance"
]
},
{
"cell_type": "markdown",
"id": "9b23c4df",
"metadata": {},
"source": [
"- add stroke (`stroke` and `color`)\n",
"- make the pie bigger (`size`)\n",
"- add hole to draw donut-like chart (`hole`)\n",
"- use blank theme (remove axis and grid)\n",
"- use better colors"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f9fbaa2c",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.506310Z",
"iopub.status.busy": "2025-12-03T16:01:47.506081Z",
"iopub.status.idle": "2025-12-03T16:01:47.557405Z",
"shell.execute_reply": "2025-12-03T16:01:47.557501Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"name": [
"a",
"b",
"c",
"d",
"b"
],
"value": [
40.0,
90.0,
10.0,
50.0,
20.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "value",
"type": "int"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"color": "white",
"geom": "pie",
"hole": 0.5,
"mapping": {
"fill": "name",
"slice": "value"
},
"position": "identity",
"size": 20.0,
"stat": "identity",
"stroke": 1.0
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"nT901f\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"nT901f\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"name\":[\"a\",\"b\",\"c\",\"d\",\"b\"],\n",
"\"value\":[40.0,90.0,10.0,50.0,20.0]\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.5,\n",
"\"mapping\":{\n",
"\"slice\":\"value\",\n",
"\"fill\":\"name\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"size\":20.0,\n",
"\"color\":\"white\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"stroke\":1.0,\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"}\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"value\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"3\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=3ea87bc4-e7b6-44cf-9dfb-c5e43097e59b width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 250.0px;\" viewBox=\"0 0 400.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pVYyXgy .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pVYyXgy .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVYyXgy .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVYyXgy .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pVYyXgy .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVYyXgy .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVYyXgy .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVYyXgy .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#djxFoML .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVYyXgy .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVYyXgy .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#djxFoML .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVYyXgy .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVYyXgy .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#djxFoML .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#djxFoML .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#djxFoML .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pVYyXgy\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#c9sFiFb)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (337.2608124881035, 238.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M122.08671881184155 100.73294878168024 L75.54303137963134 82.46589756336047 A100.0 100.0 0.0 0 1 168.63040624405176 19.0 L168.63040624405176 69.0 A50.0 50.0 0.0 0 0 122.08671881184155 100.73294878168024 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M168.63040624405176 69.0 L168.63040624405176 19.0 A100.0 100.0 0.0 0 1 212.01878015580758 209.0968867902419 L190.32459319992967 164.04844339512096 A50.0 50.0 0.0 0 0 168.63040624405176 69.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.32459319992967 164.04844339512096 L212.01878015580758 209.0968867902419 A100.0 100.0 0.0 0 1 183.53463286166922 217.88308262251286 L176.08251955286048 168.44154131125643 A50.0 50.0 0.0 0 0 190.32459319992967 164.04844339512096 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M176.08251955286048 168.44154131125643 L183.53463286166922 217.88308262251286 A100.0 100.0 0.0 0 1 71.1376150258694 141.25209339563145 L119.88401063496057 130.12604669781572 A50.0 50.0 0.0 0 0 176.08251955286048 168.44154131125643 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M119.88401063496057 130.12604669781572 L71.1376150258694 141.25209339563145 A100.0 100.0 0.0 0 1 75.54303137963132 82.46589756336054 L122.08671881184154 100.73294878168028 A50.0 50.0 0.0 0 0 119.88401063496057 130.12604669781572 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M75.54303137963134 82.46589756336047 A100.0 100.0 0.0 0 1 168.63040624405176 19.0 M168.63040624405176 69.0 A50.0 50.0 0.0 0 0 122.08671881184155 100.73294878168024 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M168.63040624405176 19.0 A100.0 100.0 0.0 0 1 212.01878015580758 209.0968867902419 M190.32459319992967 164.04844339512096 A50.0 50.0 0.0 0 0 168.63040624405176 69.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M212.01878015580758 209.0968867902419 A100.0 100.0 0.0 0 1 183.53463286166922 217.88308262251286 M176.08251955286048 168.44154131125643 A50.0 50.0 0.0 0 0 190.32459319992967 164.04844339512096 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M183.53463286166922 217.88308262251286 A100.0 100.0 0.0 0 1 71.1376150258694 141.25209339563145 M119.88401063496057 130.12604669781572 A50.0 50.0 0.0 0 0 176.08251955286048 168.44154131125643 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M71.1376150258694 141.25209339563145 A100.0 100.0 0.0 0 1 75.54303137963132 82.46589756336054 M122.08671881184154 100.73294878168028 A50.0 50.0 0.0 0 0 119.88401063496057 130.12604669781572 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M122.55215568616364 100.91561929386344 L75.07759450530924 82.28322705117728 M168.63040624405176 69.5 L168.63040624405176 18.5 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M168.63040624405176 69.5 L168.63040624405176 18.5 M190.10765133037089 163.59795896116975 L212.23572202536636 209.5473712241931 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.10765133037089 163.59795896116975 L212.23572202536636 209.5473712241931 M176.0079984197724 167.94712589814387 L183.60915399475732 218.37749803562542 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M176.0079984197724 167.94712589814387 L183.60915399475732 218.37749803562542 M120.37147459105148 130.01478623083756 L70.65015106977849 141.3633538626096 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M120.37147459105148 130.01478623083756 L70.65015106977849 141.3633538626096 M122.55215568616364 100.91561929386347 L75.07759450530921 82.28322705117733 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"c9sFiFb\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"337.2608124881035\" height=\"238.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 238.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(346.2608124881035 62.75 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"124.5\" width=\"50.739187511896475\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>name</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(228,26,28)\" fill-opacity=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(55,126,184)\" fill-opacity=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 46.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(77,175,74)\" fill-opacity=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 69.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(152,78,163)\" fill-opacity=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>d</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"djxFoML\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"3ea87bc4-e7b6-44cf-9dfb-c5e43097e59b\").style.display = \"none\";</script>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p +\n",
" geomPie(stat = Stat.identity,\n",
" size = 20, stroke = 1, color = \"white\", hole = 0.5) { slice = \"value\"; fill = \"name\" } +\n",
" blankTheme + \n",
" scaleFillBrewer(palette = \"Set1\")"
]
},
{
"cell_type": "markdown",
"id": "a760b099",
"metadata": {},
"source": [
"### 1.3. Adding labels to pie sectors"
]
},
{
"cell_type": "markdown",
"id": "46617ca9",
"metadata": {},
"source": [
"Let's label the sectors with their names - configure annotations via `layerLabels()` function: "
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "1ffd0e96",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.558593Z",
"iopub.status.busy": "2025-12-03T16:01:47.558454Z",
"iopub.status.idle": "2025-12-03T16:01:47.629274Z",
"shell.execute_reply": "2025-12-03T16:01:47.629395Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"name": [
"a",
"b",
"c",
"d",
"b"
],
"value": [
40.0,
90.0,
10.0,
50.0,
20.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "value",
"type": "int"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"color": "white",
"geom": "pie",
"hole": 0.5,
"labels": {
"annotation_size": 16,
"lines": [
"@name"
]
},
"mapping": {
"fill": "name",
"slice": "value"
},
"position": "identity",
"size": 20.0,
"stat": "identity",
"stroke": 1.0
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"legend_position": "none",
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"kegt6V\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"kegt6V\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"name\":[\"a\",\"b\",\"c\",\"d\",\"b\"],\n",
"\"value\":[40.0,90.0,10.0,50.0,20.0]\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.5,\n",
"\"mapping\":{\n",
"\"slice\":\"value\",\n",
"\"fill\":\"name\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"size\":20.0,\n",
"\"color\":\"white\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"stroke\":1.0,\n",
"\"labels\":{\n",
"\"lines\":[\"@name\"],\n",
"\"annotation_size\":16\n",
"},\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"},\n",
"\"legend_position\":\"none\"\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"value\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"5\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=c85a30b8-0540-40e2-a930-d89d4df7a05e width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 250.0px;\" viewBox=\"0 0 400.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#p4XR9cu .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#p4XR9cu .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p4XR9cu .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p4XR9cu .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#p4XR9cu .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p4XR9cu .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p4XR9cu .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p4XR9cu .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d5jSrlW .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p4XR9cu .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p4XR9cu .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d5jSrlW .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p4XR9cu .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p4XR9cu .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d5jSrlW .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d5jSrlW .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d5jSrlW .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"p4XR9cu\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#c1QDjuO)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (388.0, 238.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M147.45631256778978 100.73294878168024 L100.91262513557959 82.46589756336047 A100.0 100.0 0.0 0 1 194.0 19.0 L194.0 69.0 A50.0 50.0 0.0 0 0 147.45631256778978 100.73294878168024 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 69.0 L194.0 19.0 A100.0 100.0 0.0 0 1 237.38837391175582 209.0968867902419 L215.6941869558779 164.04844339512096 A50.0 50.0 0.0 0 0 194.0 69.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M215.6941869558779 164.04844339512096 L237.38837391175582 209.0968867902419 A100.0 100.0 0.0 0 1 208.90422661761747 217.88308262251286 L201.45211330880872 168.44154131125643 A50.0 50.0 0.0 0 0 215.6941869558779 164.04844339512096 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M201.45211330880872 168.44154131125643 L208.90422661761747 217.88308262251286 A100.0 100.0 0.0 0 1 96.50720878181764 141.25209339563145 L145.25360439090883 130.12604669781572 A50.0 50.0 0.0 0 0 201.45211330880872 168.44154131125643 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.25360439090883 130.12604669781572 L96.50720878181764 141.25209339563145 A100.0 100.0 0.0 0 1 100.91262513557956 82.46589756336054 L147.45631256778978 100.73294878168028 A50.0 50.0 0.0 0 0 145.25360439090883 130.12604669781572 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M100.91262513557959 82.46589756336047 A100.0 100.0 0.0 0 1 194.0 19.0 M194.0 69.0 A50.0 50.0 0.0 0 0 147.45631256778978 100.73294878168024 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 19.0 A100.0 100.0 0.0 0 1 237.38837391175582 209.0968867902419 M215.6941869558779 164.04844339512096 A50.0 50.0 0.0 0 0 194.0 69.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M237.38837391175582 209.0968867902419 A100.0 100.0 0.0 0 1 208.90422661761747 217.88308262251286 M201.45211330880872 168.44154131125643 A50.0 50.0 0.0 0 0 215.6941869558779 164.04844339512096 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M208.90422661761747 217.88308262251286 A100.0 100.0 0.0 0 1 96.50720878181764 141.25209339563145 M145.25360439090883 130.12604669781572 A50.0 50.0 0.0 0 0 201.45211330880872 168.44154131125643 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M96.50720878181764 141.25209339563145 A100.0 100.0 0.0 0 1 100.91262513557956 82.46589756336054 M147.45631256778978 100.73294878168028 A50.0 50.0 0.0 0 0 145.25360439090883 130.12604669781572 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M147.9217494421119 100.91561929386344 L100.44718826125748 82.28322705117728 M194.0 69.5 L194.0 18.5 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 69.5 L194.0 18.5 M215.47724508631913 163.59795896116975 L237.6053157813146 209.5473712241931 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M215.47724508631913 163.59795896116975 L237.6053157813146 209.5473712241931 M201.37759217572065 167.94712589814387 L208.97874775070557 218.37749803562542 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M201.37759217572065 167.94712589814387 L208.97874775070557 218.37749803562542 M145.74106834699973 130.01478623083756 L96.01974482572673 141.3633538626096 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M145.74106834699973 130.01478623083756 L96.01974482572673 141.3633538626096 M147.9217494421119 100.91561929386347 L100.44718826125745 82.28322705117733 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g transform=\"rotate(0.0 151.7509956452284 57.03209192630037 ) \">\n",
" <g transform=\"translate(151.7509956452284 61.832091926300365 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 267.1195934136368 102.31092995327643 ) \">\n",
" <g transform=\"translate(267.1195934136368 107.11092995327643 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 216.10663808081782 190.66796043396056 ) \">\n",
" <g transform=\"translate(216.10663808081782 195.46796043396057 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 151.7509956452284 180.96790807369962 ) \">\n",
" <g transform=\"translate(151.7509956452284 185.76790807369963 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>d</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 119.20971521141149 113.3952429810182 ) \">\n",
" <g transform=\"translate(119.20971521141149 118.1952429810182 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"c1QDjuO\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"388.0\" height=\"238.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 238.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"d5jSrlW\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"c85a30b8-0540-40e2-a930-d89d4df7a05e\").style.display = \"none\";</script>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p + \n",
" geomPie(\n",
" stat = Stat.identity,\n",
" size = 20, stroke = 1, color = \"white\", hole = 0.5,\n",
" labels = layerLabels().line(\"@name\").size(16)\n",
" ) { slice = \"value\"; fill = \"name\" } +\n",
" blankTheme + \n",
" theme().legendPositionNone() +\n",
" scaleFillBrewer(palette = \"Set1\")"
]
},
{
"cell_type": "markdown",
"id": "df65d3f1",
"metadata": {},
"source": [
"### 1.4. Use \"count2d\" statistical transformation"
]
},
{
"cell_type": "markdown",
"id": "73a8987c",
"metadata": {},
"source": [
"`geomPie()` uses `count2d` stat by default. \n",
"It allows to make a slice sizes proportional to the number of cases in each group (or if the weight aesthetic is supplied, the sum of the weights). Also `count2d` provides variables for proportion ('..prop..') and proportion in percent ('..proppct..'). "
]
},
{
"cell_type": "markdown",
"id": "e9d823c8",
"metadata": {},
"source": [
"Using `layerTooltips()` prepare the information for tooltips by adding the variables provided by 'count2d':"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "1d183b4d",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.631272Z",
"iopub.status.busy": "2025-12-03T16:01:47.630919Z",
"iopub.status.idle": "2025-12-03T16:01:47.661490Z",
"shell.execute_reply": "2025-12-03T16:01:47.661112Z"
}
},
"outputs": [],
"source": [
"val tooltipContent = layerTooltips()\n",
" .line(\"count|@{..count..} (@{..prop..})\")\n",
" .line(\"total|@{..sum..}\")\n",
" .format(\"..prop..\", \".0%\")\n",
" .format(\"..count..\", \".1f\")\n",
" .format(\"..sum..\", \".1f\")"
]
},
{
"cell_type": "markdown",
"id": "2bce5820",
"metadata": {},
"source": [
"Apply 'count2d' to get slices proportional to the number of cases."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ab7010dc",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.663194Z",
"iopub.status.busy": "2025-12-03T16:01:47.662980Z",
"iopub.status.idle": "2025-12-03T16:01:47.732444Z",
"shell.execute_reply": "2025-12-03T16:01:47.732241Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"name": [
"a",
"b",
"c",
"d",
"b"
],
"value": [
40.0,
90.0,
10.0,
50.0,
20.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "value",
"type": "int"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"color": "white",
"geom": "pie",
"hole": 0.5,
"labels": {
"annotation_size": 16,
"lines": [
"@name"
]
},
"mapping": {
"fill": "name"
},
"position": "identity",
"size": 20.0,
"stat": "count2d",
"stroke": 1.0,
"tooltips": {
"formats": [
{
"field": "..prop..",
"format": ".0%"
},
{
"field": "..count..",
"format": ".1f"
},
{
"field": "..sum..",
"format": ".1f"
}
],
"lines": [
"count|@{..count..} (@{..prop..})",
"total|@{..sum..}"
]
}
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"legend_position": "none",
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"eB9gR0\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"eB9gR0\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.5,\n",
"\"mapping\":{\n",
"\"fill\":\"name\"\n",
"},\n",
"\"stat\":\"count2d\",\n",
"\"size\":20.0,\n",
"\"color\":\"white\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"stroke\":1.0,\n",
"\"tooltips\":{\n",
"\"lines\":[\"count|@{..count..} (@{..prop..})\",\"total|@{..sum..}\"],\n",
"\"formats\":[{\n",
"\"field\":\"..prop..\",\n",
"\"format\":\".0%\"\n",
"},{\n",
"\"field\":\"..count..\",\n",
"\"format\":\".1f\"\n",
"},{\n",
"\"field\":\"..sum..\",\n",
"\"format\":\".1f\"\n",
"}]\n",
"},\n",
"\"labels\":{\n",
"\"lines\":[\"@name\"],\n",
"\"annotation_size\":16\n",
"},\n",
"\"data\":{\n",
"\"..sum..\":[5.0,5.0,5.0,5.0],\n",
"\"..count..\":[1.0,2.0,1.0,1.0],\n",
"\"..x..\":[0.0,0.0,0.0,0.0],\n",
"\"..y..\":[0.0,0.0,0.0,0.0],\n",
"\"name\":[\"a\",\"b\",\"c\",\"d\"],\n",
"\"..prop..\":[0.2,0.4,0.2,0.2]\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"},\n",
"\"legend_position\":\"none\"\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"value\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"7\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=b57921e4-a779-4f29-84cd-ef6ef933b0fc width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 250.0px;\" viewBox=\"0 0 400.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#p2W4UEd .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#p2W4UEd .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p2W4UEd .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p2W4UEd .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#p2W4UEd .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p2W4UEd .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p2W4UEd .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p2W4UEd .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA3mEPw .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p2W4UEd .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p2W4UEd .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA3mEPw .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p2W4UEd .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p2W4UEd .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA3mEPw .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA3mEPw .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA3mEPw .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"p2W4UEd\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cac1oJZ)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (388.0, 238.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M146.44717418524232 103.54915028125262 L98.89434837048465 88.09830056250524 A100.0 100.0 0.0 0 1 194.0 19.0 L194.0 69.0 A50.0 50.0 0.0 0 0 146.44717418524232 103.54915028125262 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 69.0 L194.0 19.0 A100.0 100.0 0.0 0 1 252.77852522924732 199.90169943749476 L223.38926261462365 159.45084971874738 A50.0 50.0 0.0 0 0 194.0 69.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M223.38926261462365 159.45084971874738 L252.77852522924732 199.90169943749476 A100.0 100.0 0.0 0 1 135.2214747707527 199.90169943749476 L164.61073738537635 159.45084971874738 A50.0 50.0 0.0 0 0 223.38926261462365 159.45084971874738 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M164.61073738537635 159.45084971874738 L135.2214747707527 199.90169943749476 A100.0 100.0 0.0 0 1 98.89434837048464 88.09830056250527 L146.44717418524232 103.54915028125264 A50.0 50.0 0.0 0 0 164.61073738537635 159.45084971874738 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M98.89434837048465 88.09830056250524 A100.0 100.0 0.0 0 1 194.0 19.0 M194.0 69.0 A50.0 50.0 0.0 0 0 146.44717418524232 103.54915028125262 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 19.0 A100.0 100.0 0.0 0 1 252.77852522924732 199.90169943749476 M223.38926261462365 159.45084971874738 A50.0 50.0 0.0 0 0 194.0 69.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M252.77852522924732 199.90169943749476 A100.0 100.0 0.0 0 1 135.2214747707527 199.90169943749476 M164.61073738537635 159.45084971874738 A50.0 50.0 0.0 0 0 223.38926261462365 159.45084971874738 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M135.2214747707527 199.90169943749476 A100.0 100.0 0.0 0 1 98.89434837048464 88.09830056250527 M146.44717418524232 103.54915028125264 A50.0 50.0 0.0 0 0 164.61073738537635 159.45084971874738 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M146.9227024433899 103.7036587784401 L98.41882011233707 87.94379206531778 M194.0 69.5 L194.0 18.5 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 69.5 L194.0 18.5 M223.09536998847742 159.04634122155989 L253.07241785539355 200.30620793468222 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M223.09536998847742 159.04634122155989 L253.07241785539355 200.30620793468222 M164.90463001152258 159.04634122155989 L134.92758214460645 200.30620793468222 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M164.90463001152258 159.04634122155989 L134.92758214460645 200.30620793468222 M146.92270244338988 103.70365877844011 L98.41882011233706 87.9437920653178 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g transform=\"rotate(0.0 149.91610607806453 58.32372542187894 ) \">\n",
" <g transform=\"translate(149.91610607806453 63.123725421878945 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 265.3292387221365 95.82372542187895 ) \">\n",
" <g transform=\"translate(265.3292387221365 100.62372542187894 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 194.0 194.0 ) \">\n",
" <g transform=\"translate(194.0 198.8 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 122.67076127786349 142.17627457812105 ) \">\n",
" <g transform=\"translate(122.67076127786349 146.97627457812106 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>d</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cac1oJZ\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"388.0\" height=\"238.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 238.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dA3mEPw\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"b57921e4-a779-4f29-84cd-ef6ef933b0fc\").style.display = \"none\";</script>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p +\n",
" geomPie(\n",
" size = 20, stroke = 1, color = \"white\", hole = 0.5,\n",
" labels = layerLabels().line(\"@name\").size(16),\n",
" tooltips = tooltipContent\n",
" ) { fill = \"name\" } +\n",
" blankTheme + \n",
" theme().legendPositionNone() +\n",
" scaleFillBrewer(palette = \"Set1\")"
]
},
{
"cell_type": "markdown",
"id": "32d1cdc0",
"metadata": {},
"source": [
"Compute weighted sum instead of simple count with aesthetic `weight`."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "77f81cce",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.734284Z",
"iopub.status.busy": "2025-12-03T16:01:47.733724Z",
"iopub.status.idle": "2025-12-03T16:01:47.787673Z",
"shell.execute_reply": "2025-12-03T16:01:47.787751Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"name": [
"a",
"b",
"c",
"d",
"b"
],
"value": [
40.0,
90.0,
10.0,
50.0,
20.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "value",
"type": "int"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"color": "white",
"geom": "pie",
"hole": 0.5,
"labels": {
"annotation_size": 16,
"lines": [
"@name"
]
},
"mapping": {
"fill": "name",
"weight": "value"
},
"position": "identity",
"size": 20.0,
"stat": "count2d",
"stroke": 1.0,
"tooltips": {
"formats": [
{
"field": "..prop..",
"format": ".0%"
},
{
"field": "..count..",
"format": ".1f"
},
{
"field": "..sum..",
"format": ".1f"
}
],
"lines": [
"count|@{..count..} (@{..prop..})",
"total|@{..sum..}"
]
}
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"legend_position": "none",
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"GkfdrV\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"GkfdrV\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.5,\n",
"\"mapping\":{\n",
"\"fill\":\"name\",\n",
"\"weight\":\"value\"\n",
"},\n",
"\"stat\":\"count2d\",\n",
"\"size\":20.0,\n",
"\"color\":\"white\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"stroke\":1.0,\n",
"\"tooltips\":{\n",
"\"lines\":[\"count|@{..count..} (@{..prop..})\",\"total|@{..sum..}\"],\n",
"\"formats\":[{\n",
"\"field\":\"..prop..\",\n",
"\"format\":\".0%\"\n",
"},{\n",
"\"field\":\"..count..\",\n",
"\"format\":\".1f\"\n",
"},{\n",
"\"field\":\"..sum..\",\n",
"\"format\":\".1f\"\n",
"}]\n",
"},\n",
"\"labels\":{\n",
"\"lines\":[\"@name\"],\n",
"\"annotation_size\":16\n",
"},\n",
"\"data\":{\n",
"\"..sum..\":[210.0,210.0,210.0,210.0],\n",
"\"..count..\":[40.0,110.0,10.0,50.0],\n",
"\"..x..\":[0.0,0.0,0.0,0.0],\n",
"\"..y..\":[0.0,0.0,0.0,0.0],\n",
"\"name\":[\"a\",\"b\",\"c\",\"d\"],\n",
"\"..prop..\":[0.19047619047619047,0.5238095238095238,0.047619047619047616,0.23809523809523808]\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"},\n",
"\"legend_position\":\"none\"\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"value\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"9\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=8d328e47-7eb2-4346-b3df-a4ee90df58b6 width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 250.0px;\" viewBox=\"0 0 400.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pBseza9 .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pBseza9 .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pBseza9 .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pBseza9 .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pBseza9 .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pBseza9 .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pBseza9 .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pBseza9 .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dVyaHNF .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pBseza9 .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pBseza9 .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dVyaHNF .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pBseza9 .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pBseza9 .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dVyaHNF .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dVyaHNF .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dVyaHNF .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pBseza9\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cJ3q3b2)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (388.0, 238.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M147.45631256778978 100.73294878168024 L100.91262513557959 82.46589756336047 A100.0 100.0 0.0 0 1 194.0 19.0 L194.0 69.0 A50.0 50.0 0.0 0 0 147.45631256778978 100.73294878168024 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 69.0 L194.0 19.0 A100.0 100.0 0.0 1 1 179.09577338238256 217.88308262251286 L186.54788669119128 168.44154131125643 A50.0 50.0 0.0 1 0 194.0 69.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M186.54788669119128 168.44154131125643 L179.09577338238256 217.88308262251286 A100.0 100.0 0.0 0 1 150.61162608824418 209.0968867902419 L172.3058130441221 164.04844339512096 A50.0 50.0 0.0 0 0 186.54788669119128 168.44154131125643 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M172.3058130441221 164.04844339512096 L150.61162608824418 209.0968867902419 A100.0 100.0 0.0 0 1 100.91262513557956 82.46589756336054 L147.45631256778978 100.73294878168028 A50.0 50.0 0.0 0 0 172.3058130441221 164.04844339512096 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M100.91262513557959 82.46589756336047 A100.0 100.0 0.0 0 1 194.0 19.0 M194.0 69.0 A50.0 50.0 0.0 0 0 147.45631256778978 100.73294878168024 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 19.0 A100.0 100.0 0.0 1 1 179.09577338238256 217.88308262251286 M186.54788669119128 168.44154131125643 A50.0 50.0 0.0 1 0 194.0 69.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M179.09577338238256 217.88308262251286 A100.0 100.0 0.0 0 1 150.61162608824418 209.0968867902419 M172.3058130441221 164.04844339512096 A50.0 50.0 0.0 0 0 186.54788669119128 168.44154131125643 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M150.61162608824418 209.0968867902419 A100.0 100.0 0.0 0 1 100.91262513557956 82.46589756336054 M147.45631256778978 100.73294878168028 A50.0 50.0 0.0 0 0 172.3058130441221 164.04844339512096 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M147.9217494421119 100.91561929386344 L100.44718826125748 82.28322705117728 M194.0 69.5 L194.0 18.5 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M194.0 69.5 L194.0 18.5 M186.62240782427935 167.94712589814387 L179.02125224929446 218.37749803562542 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M186.62240782427935 167.94712589814387 L179.02125224929446 218.37749803562542 M172.52275491368087 163.59795896116975 L150.39468421868543 209.5473712241931 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M172.52275491368087 163.59795896116975 L150.39468421868543 209.5473712241931 M147.9217494421119 100.91561929386347 L100.44718826125745 82.28322705117733 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g transform=\"rotate(0.0 151.7509956452284 57.03209192630037 ) \">\n",
" <g transform=\"translate(151.7509956452284 61.832091926300365 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 268.7902847885885 124.60475701898183 ) \">\n",
" <g transform=\"translate(268.7902847885885 129.40475701898183 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 171.89336191918218 190.66796043396056 ) \">\n",
" <g transform=\"translate(171.89336191918218 195.46796043396057 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 124.18446885168468 146.40057682747965 ) \">\n",
" <g transform=\"translate(124.18446885168468 151.20057682747967 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>d</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cJ3q3b2\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"388.0\" height=\"238.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 238.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dVyaHNF\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"8d328e47-7eb2-4346-b3df-a4ee90df58b6\").style.display = \"none\";</script>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p +\n",
" geomPie(\n",
" size = 20, stroke = 1, color = \"white\", hole = 0.5,\n",
" labels = layerLabels().line(\"@name\").size(16),\n",
" tooltips = tooltipContent\n",
" ) { fill = \"name\"; weight = \"value\" } +\n",
" blankTheme + \n",
" theme().legendPositionNone() +\n",
" scaleFillBrewer(palette = \"Set1\") "
]
},
{
"cell_type": "markdown",
"id": "4772e96d",
"metadata": {},
"source": [
"Order sectors by count.\n",
"\n",
"The following ordering rule is used for the pie chart: the first slice goes to the left of 12 o'clock and others go clockwise."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "90a172ad",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.789361Z",
"iopub.status.busy": "2025-12-03T16:01:47.789067Z",
"iopub.status.idle": "2025-12-03T16:01:47.846179Z",
"shell.execute_reply": "2025-12-03T16:01:47.846050Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"name": [
"a",
"b",
"c",
"d",
"b"
],
"value": [
40.0,
90.0,
10.0,
50.0,
20.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "value",
"type": "int"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"color": "white",
"data_meta": {
"mapping_annotations": [
{
"aes": "fill",
"annotation": "as_discrete",
"parameters": {
"label": "name",
"order_by": "..count.."
}
}
]
},
"geom": "pie",
"hole": 0.5,
"labels": {
"annotation_size": 16,
"lines": [
"@name"
]
},
"mapping": {
"fill": "name",
"weight": "value"
},
"position": "identity",
"size": 20.0,
"stat": "count2d",
"stroke": 1.0,
"tooltips": {
"formats": [
{
"field": "..prop..",
"format": ".0%"
},
{
"field": "..count..",
"format": ".1f"
},
{
"field": "..sum..",
"format": ".1f"
}
],
"lines": [
"count|@{..count..} (@{..prop..})",
"total|@{..sum..}"
]
}
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"legend_position": "none",
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"pbWAUb\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"pbWAUb\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.5,\n",
"\"mapping\":{\n",
"\"fill\":\"name\",\n",
"\"weight\":\"value\"\n",
"},\n",
"\"stat\":\"count2d\",\n",
"\"size\":20.0,\n",
"\"color\":\"white\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"stroke\":1.0,\n",
"\"data_meta\":{\n",
"\"mapping_annotations\":[{\n",
"\"aes\":\"fill\",\n",
"\"annotation\":\"as_discrete\",\n",
"\"parameters\":{\n",
"\"label\":\"name\",\n",
"\"order_by\":\"..count..\"\n",
"}\n",
"}]\n",
"},\n",
"\"tooltips\":{\n",
"\"lines\":[\"count|@{..count..} (@{..prop..})\",\"total|@{..sum..}\"],\n",
"\"formats\":[{\n",
"\"field\":\"..prop..\",\n",
"\"format\":\".0%\"\n",
"},{\n",
"\"field\":\"..count..\",\n",
"\"format\":\".1f\"\n",
"},{\n",
"\"field\":\"..sum..\",\n",
"\"format\":\".1f\"\n",
"}]\n",
"},\n",
"\"labels\":{\n",
"\"lines\":[\"@name\"],\n",
"\"annotation_size\":16\n",
"},\n",
"\"data\":{\n",
"\"..sum..\":[210.0,210.0,210.0,210.0],\n",
"\"..count..\":[110.0,50.0,40.0,10.0],\n",
"\"..x..\":[0.0,0.0,0.0,0.0],\n",
"\"..y..\":[0.0,0.0,0.0,0.0],\n",
"\"name\":[\"b\",\"d\",\"a\",\"c\"],\n",
"\"..prop..\":[0.5238095238095238,0.23809523809523808,0.19047619047619047,0.047619047619047616]\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"},\n",
"\"legend_position\":\"none\"\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"value\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"11\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=304df50f-a744-4774-9587-9612b7d06ab8 width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 250.0px;\" viewBox=\"0 0 400.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pglklZU .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pglklZU .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pglklZU .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pglklZU .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pglklZU .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pglklZU .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pglklZU .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pglklZU .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dwr2Vx8 .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pglklZU .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pglklZU .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dwr2Vx8 .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pglklZU .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pglklZU .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dwr2Vx8 .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dwr2Vx8 .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dwr2Vx8 .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pglklZU\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cioPPom)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (388.0, 238.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M201.45211330880875 168.44154131125643 L208.9042266176175 217.88308262251286 A100.0 100.0 0.0 1 1 193.99999999999997 19.0 L193.99999999999997 69.0 A50.0 50.0 0.0 1 0 201.45211330880875 168.44154131125643 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M193.99999999999997 69.0 L193.99999999999997 19.0 A100.0 100.0 0.0 0 1 293.720379718118 111.52699064135753 L243.860189859059 115.26349532067876 A50.0 50.0 0.0 0 0 193.99999999999997 69.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M243.860189859059 115.26349532067876 L293.720379718118 111.52699064135753 A100.0 100.0 0.0 0 1 237.38837391175588 209.09688679024188 L215.69418695587794 164.04844339512096 A50.0 50.0 0.0 0 0 243.860189859059 115.26349532067876 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M215.69418695587794 164.04844339512096 L237.38837391175588 209.09688679024188 A100.0 100.0 0.0 0 1 208.9042266176175 217.88308262251286 L201.45211330880875 168.44154131125643 A50.0 50.0 0.0 0 0 215.69418695587794 164.04844339512096 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M208.9042266176175 217.88308262251286 A100.0 100.0 0.0 1 1 193.99999999999997 19.0 M193.99999999999997 69.0 A50.0 50.0 0.0 1 0 201.45211330880875 168.44154131125643 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M193.99999999999997 19.0 A100.0 100.0 0.0 0 1 293.720379718118 111.52699064135753 M243.860189859059 115.26349532067876 A50.0 50.0 0.0 0 0 193.99999999999997 69.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M293.720379718118 111.52699064135753 A100.0 100.0 0.0 0 1 237.38837391175588 209.09688679024188 M215.69418695587794 164.04844339512096 A50.0 50.0 0.0 0 0 243.860189859059 115.26349532067876 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M237.38837391175588 209.09688679024188 A100.0 100.0 0.0 0 1 208.9042266176175 217.88308262251286 M201.45211330880875 168.44154131125643 A50.0 50.0 0.0 0 0 215.69418695587794 164.04844339512096 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M201.37759217572065 167.94712589814387 L208.97874775070557 218.37749803562542 M193.99999999999997 69.5 L193.99999999999997 18.5 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M193.99999999999997 69.5 L193.99999999999997 18.5 M243.36158796046843 115.30086036747197 L294.2189816167086 111.48962559456432 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M243.36158796046843 115.30086036747197 L294.2189816167086 111.48962559456432 M215.47724508631916 163.59795896116972 L237.60531578131466 209.54737122419309 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M215.47724508631916 163.59795896116972 L237.60531578131466 209.54737122419309 M201.37759217572068 167.94712589814387 L208.9787477507056 218.37749803562542 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g transform=\"rotate(0.0 119.20971521141149 124.60475701898183 ) \">\n",
" <g transform=\"translate(119.20971521141149 129.40475701898183 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 245.01295533281893 64.021109612763 ) \">\n",
" <g transform=\"translate(245.01295533281893 68.821109612763 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>d</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 258.9519052838329 156.49999999999994 ) \">\n",
" <g transform=\"translate(258.9519052838329 161.29999999999995 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"rotate(0.0 216.10663808081787 190.66796043396053 ) \">\n",
" <g transform=\"translate(216.10663808081787 195.46796043396054 ) \">\n",
" <text style=\"fill:#ffffff;font-size:16.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cioPPom\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"388.0\" height=\"238.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 238.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 250.0 L400.0 250.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dwr2Vx8\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"304df50f-a744-4774-9587-9612b7d06ab8\").style.display = \"none\";</script>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p +\n",
" geomPie(\n",
" size = 20, stroke = 1, color = \"white\", hole = 0.5,\n",
" labels = layerLabels().line(\"@name\").size(16),\n",
" tooltips = tooltipContent\n",
" ) { fill = asDiscrete(\"name\", orderBy = \"..count..\"); weight = \"value\" } +\n",
" blankTheme + \n",
" theme().legendPositionNone() +\n",
" scaleFillBrewer(palette = \"Set1\")"
]
},
{
"cell_type": "markdown",
"id": "2b506543",
"metadata": {},
"source": [
"## 2. Pie size depending on data"
]
},
{
"cell_type": "markdown",
"id": "40def630",
"metadata": {},
"source": [
"Make the size of the pie chart dependent on the data: map total count ('..sum..' variable) to the `size`.\n",
"\n",
"Note that it has its own special representation of the size in the legend."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "407aa42e",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.847309Z",
"iopub.status.busy": "2025-12-03T16:01:47.847106Z",
"iopub.status.idle": "2025-12-03T16:01:47.967684Z",
"shell.execute_reply": "2025-12-03T16:01:47.967815Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"n": [
"a",
"b",
"a",
"c",
"a",
"a",
"b",
"c",
"a",
"b"
],
"s": [
3.0,
1.0,
2.0,
1.0,
4.0,
1.0,
3.0,
3.0,
3.0,
1.0
],
"x": [
1.0,
1.0,
1.0,
1.0,
1.0,
1.5,
1.5,
2.0,
2.0,
2.0
],
"y": [
1.0,
1.0,
1.0,
1.0,
1.0,
2.0,
2.0,
1.5,
1.5,
1.5
]
},
"data_meta": {
"series_annotations": [
{
"column": "x",
"type": "int"
},
{
"column": "y",
"type": "int"
},
{
"column": "s",
"type": "int"
}
]
},
"kind": "plot",
"layers": [
{
"data_meta": {
"mapping_annotations": [
{
"aes": "fill",
"annotation": "as_discrete",
"parameters": {
"label": "n",
"order": -1,
"order_by": "..count.."
}
}
]
},
"geom": "pie",
"hole": 0.3,
"mapping": {
"fill": "n",
"size": "..sum..",
"weight": "s",
"x": "x",
"y": "y"
},
"position": "identity",
"stat": "count2d",
"tooltips": {
"formats": [
{
"field": "..prop..",
"format": ".0%"
},
{
"field": "..count..",
"format": ".1f"
},
{
"field": "..sum..",
"format": ".1f"
}
],
"lines": [
"count|@{..count..} (@{..prop..})",
"total|@{..sum..}"
]
}
}
],
"mapping": {},
"scales": [
{
"aesthetic": "x",
"limits": [
0.5,
2.5
]
},
{
"aesthetic": "y",
"limits": [
0.5,
2.5
]
}
]
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"g1t1IS\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"g1t1IS\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"x\",\n",
"\"limits\":[0.5,2.5]\n",
"},{\n",
"\"aesthetic\":\"y\",\n",
"\"limits\":[0.5,2.5]\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.3,\n",
"\"mapping\":{\n",
"\"x\":\"x\",\n",
"\"y\":\"y\",\n",
"\"size\":\"..sum..\",\n",
"\"fill\":\"n\",\n",
"\"weight\":\"s\"\n",
"},\n",
"\"stat\":\"count2d\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"data_meta\":{\n",
"\"mapping_annotations\":[{\n",
"\"aes\":\"fill\",\n",
"\"annotation\":\"as_discrete\",\n",
"\"parameters\":{\n",
"\"label\":\"n\",\n",
"\"order_by\":\"..count..\",\n",
"\"order\":-1\n",
"}\n",
"}]\n",
"},\n",
"\"tooltips\":{\n",
"\"lines\":[\"count|@{..count..} (@{..prop..})\",\"total|@{..sum..}\"],\n",
"\"formats\":[{\n",
"\"field\":\"..prop..\",\n",
"\"format\":\".0%\"\n",
"},{\n",
"\"field\":\"..count..\",\n",
"\"format\":\".1f\"\n",
"},{\n",
"\"field\":\"..sum..\",\n",
"\"format\":\".1f\"\n",
"}]\n",
"},\n",
"\"data\":{\n",
"\"..sum..\":[11.0,4.0,7.0,11.0,7.0,11.0,4.0,7.0],\n",
"\"..count..\":[9.0,1.0,3.0,1.0,3.0,1.0,3.0,1.0],\n",
"\"x\":[1.0,1.5,2.0,1.0,2.0,1.0,1.5,2.0],\n",
"\"y\":[1.0,2.0,1.5,1.0,1.5,1.0,2.0,1.5],\n",
"\"..prop..\":[0.8181818181818182,0.25,0.42857142857142855,0.09090909090909091,0.42857142857142855,0.09090909090909091,0.75,0.14285714285714285],\n",
"\"n\":[\"a\",\"a\",\"a\",\"c\",\"c\",\"b\",\"b\",\"b\"]\n",
"}\n",
"}],\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"x\"\n",
"},{\n",
"\"type\":\"int\",\n",
"\"column\":\"y\"\n",
"},{\n",
"\"type\":\"int\",\n",
"\"column\":\"s\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"13\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=219b9189-2b9a-4998-ac43-03587b056fb8 width=\"100%\" height=\"100%\" style=\"max-width: 600.0px; max-height: 400.0px;\" viewBox=\"0 0 600.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#p5xVbcE .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#p5xVbcE .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p5xVbcE .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p5xVbcE .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#p5xVbcE .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p5xVbcE .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p5xVbcE .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p5xVbcE .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dV2Xxei .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p5xVbcE .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#p5xVbcE .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dV2Xxei .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p5xVbcE .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#p5xVbcE .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dV2Xxei .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dV2Xxei .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dV2Xxei .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"p5xVbcE\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(21.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
" <g>\n",
" <line x1=\"19.63699023368399\" y1=\"0.0\" x2=\"19.63699023368399\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"117.82194140210399\" y1=\"0.0\" x2=\"117.82194140210399\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"216.00689257052397\" y1=\"0.0\" x2=\"216.00689257052397\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"314.191843738944\" y1=\"0.0\" x2=\"314.191843738944\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"412.376794907364\" y1=\"0.0\" x2=\"412.376794907364\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
" <g>\n",
" <line x1=\"0.0\" y1=\"337.90909090909093\" x2=\"432.01378514104806\" y2=\"337.90909090909093\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"257.4545454545455\" x2=\"432.01378514104806\" y2=\"257.4545454545455\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"177.0\" x2=\"432.01378514104806\" y2=\"177.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"96.54545454545456\" x2=\"432.01378514104806\" y2=\"96.54545454545456\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" <line x1=\"0.0\" y1=\"16.090909090909122\" x2=\"432.01378514104806\" y2=\"16.090909090909122\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
" </line>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#c0Hdr73)\" clip-bounds-jfx=\"[rect (23.034701220281416, 0.0), (432.01378514104806, 354.0)]\">\n",
" <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M130.8462176992255 251.50655776838212 L161.23619572584235 237.6279198340009 A47.72727272727272 47.72727272727272 0.0 1 1 117.82194140210399 209.72727272727278 L117.82194140210399 243.13636363636368 A14.318181818181815 14.318181818181815 0.0 1 0 130.8462176992255 251.50655776838212 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M117.82194140210399 243.13636363636368 L117.82194140210399 209.72727272727278 A47.72727272727272 47.72727272727272 0.0 0 1 143.62525314430297 217.30380866033005 L125.56293492476368 245.40932441628087 A14.318181818181815 14.318181818181815 0.0 0 0 117.82194140210399 243.13636363636368 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M125.56293492476368 245.40932441628087 L143.62525314430297 217.30380866033005 A47.72727272727272 47.72727272727272 0.0 0 1 161.23619572584238 237.62791983400092 L130.8462176992255 251.50655776838212 A14.318181818181815 14.318181818181815 0.0 0 0 125.56293492476368 245.40932441628087 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M161.23619572584235 237.6279198340009 A47.72727272727272 47.72727272727272 0.0 1 1 117.82194140210399 209.72727272727278 M117.82194140210399 243.13636363636368 A14.318181818181815 14.318181818181815 0.0 1 0 130.8462176992255 251.50655776838212 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M117.82194140210399 209.72727272727278 A47.72727272727272 47.72727272727272 0.0 0 1 143.62525314430297 217.30380866033005 M125.56293492476368 245.40932441628087 A14.318181818181815 14.318181818181815 0.0 0 0 117.82194140210399 243.13636363636368 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M143.62525314430297 217.30380866033005 A47.72727272727272 47.72727272727272 0.0 0 1 161.23619572584238 237.62791983400092 M130.8462176992255 251.50655776838212 A14.318181818181815 14.318181818181815 0.0 0 0 125.56293492476368 245.40932441628087 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M130.50510570096756 251.66233839825782 L161.5773077241003 237.4721392041252 M117.82194140210399 243.51136363636368 L117.82194140210399 209.35227272727278 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M117.82194140210399 243.51136363636368 L117.82194140210399 209.35227272727278 M125.36019461821783 245.72479449109255 L143.82799345084882 216.98833858551836 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M125.36019461821783 245.72479449109255 L143.82799345084882 216.98833858551836 M130.50510570096756 251.66233839825784 L161.5773077241003 237.4721392041252 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M213.96143802506944 96.54545454545456 L209.18871075234216 96.54545454545456 A6.818181818181817 6.818181818181817 0.0 0 1 216.00689257052397 89.72727272727275 L216.00689257052397 94.50000000000001 A2.045454545454545 2.045454545454545 0.0 0 0 213.96143802506944 96.54545454545456 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M216.00689257052397 94.50000000000001 L216.00689257052397 89.72727272727275 A6.818181818181817 6.818181818181817 0.0 1 1 209.18871075234216 96.54545454545456 L213.96143802506944 96.54545454545456 A2.045454545454545 2.045454545454545 0.0 1 0 216.00689257052397 94.50000000000001 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M209.18871075234216 96.54545454545456 A6.818181818181817 6.818181818181817 0.0 0 1 216.00689257052397 89.72727272727275 M216.00689257052397 94.50000000000001 A2.045454545454545 2.045454545454545 0.0 0 0 213.96143802506944 96.54545454545456 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M216.00689257052397 89.72727272727275 A6.818181818181817 6.818181818181817 0.0 1 1 209.18871075234216 96.54545454545456 M213.96143802506944 96.54545454545456 A2.045454545454545 2.045454545454545 0.0 1 0 216.00689257052397 94.50000000000001 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M214.33643802506944 96.54545454545456 L208.81371075234216 96.54545454545456 M216.00689257052397 94.87500000000001 L216.00689257052397 89.35227272727275 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M216.00689257052397 94.87500000000001 L216.00689257052397 89.35227272727275 M214.33643802506944 96.54545454545456 L208.81371075234216 96.54545454545456 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M311.0222385018839 183.58175309344298 L303.6264929487437 198.9391769781433 A24.35064935064935 24.35064935064935 0.0 0 1 314.191843738944 152.64935064935065 L314.191843738944 169.69480519480518 A7.305194805194804 7.305194805194804 0.0 0 0 311.0222385018839 183.58175309344298 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M314.191843738944 169.69480519480518 L314.191843738944 152.64935064935065 A24.35064935064935 24.35064935064935 0.0 0 1 324.7571945291443 198.93917697814334 L317.36144897600406 183.58175309344298 A7.305194805194804 7.305194805194804 0.0 0 0 314.191843738944 169.69480519480518 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M317.36144897600406 183.58175309344298 L324.7571945291443 198.93917697814334 A24.35064935064935 24.35064935064935 0.0 0 1 303.6264929487437 198.93917697814334 L311.0222385018839 183.58175309344298 A7.305194805194804 7.305194805194804 0.0 0 0 317.36144897600406 183.58175309344298 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M303.6264929487437 198.9391769781433 A24.35064935064935 24.35064935064935 0.0 0 1 314.191843738944 152.64935064935065 M314.191843738944 169.69480519480518 A7.305194805194804 7.305194805194804 0.0 0 0 311.0222385018839 183.58175309344298 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M314.191843738944 152.64935064935065 A24.35064935064935 24.35064935064935 0.0 0 1 324.7571945291443 198.93917697814334 M317.36144897600406 183.58175309344298 A7.305194805194804 7.305194805194804 0.0 0 0 314.191843738944 169.69480519480518 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M324.7571945291443 198.93917697814334 A24.35064935064935 24.35064935064935 0.0 0 1 303.6264929487437 198.93917697814334 M311.0222385018839 183.58175309344298 A7.305194805194804 7.305194805194804 0.0 0 0 317.36144897600406 183.58175309344298 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M311.184944904053 183.2438897679796 L303.4637865465746 199.27704030360673 M314.191843738944 170.06980519480518 L314.191843738944 152.27435064935065 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M314.191843738944 170.06980519480518 L314.191843738944 152.27435064935065 M317.198742573835 183.2438897679796 L324.91990093131335 199.27704030360673 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M317.198742573835 183.2438897679796 L324.91990093131335 199.27704030360673 M311.184944904053 183.2438897679796 L303.4637865465746 199.27704030360673 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"c0Hdr73\">\n",
" <rect x=\"23.034701220281416\" y=\"0.0\" width=\"432.01378514104806\" height=\"354.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(23.034701220281416 354.0 ) \">\n",
" <g transform=\"translate(19.63699023368399 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>0.5</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(117.82194140210399 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>1</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(216.00689257052397 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>1.5</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(314.191843738944 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>2</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(412.376794907364 0.0 ) \">\n",
" <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
" </line>\n",
" <g transform=\"translate(0.0 6.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
" <tspan>2.5</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <line x1=\"0.0\" y1=\"0.0\" x2=\"432.01378514104806\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
" </line>\n",
" </g>\n",
" <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
" <g transform=\"translate(0.0 337.90909090909093 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>0.5</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 257.4545454545455 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>1</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 177.0 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>1.5</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 96.54545454545456 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>2</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 16.090909090909122 ) \">\n",
" <g transform=\"translate(-2.0 0.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
" <tspan>2.5</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(15.0 183.0 ) rotate(-90.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-y\" text-anchor=\"middle\">\n",
" <tspan>y</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(260.04159379080545 394.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-x\" text-anchor=\"middle\">\n",
" <tspan>x</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(479.0484863613295 1.5 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"251.5\" width=\"117.9515136386705\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>sum</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"43.0\" cy=\"10.5\" r=\"6.818181818181817\" fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(91.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>4</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"43.0\" cy=\"20.0\" r=\"18.506493506493506\" fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(91.9903027277341 21.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>6</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 65.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"43.0\" cy=\"32.0\" r=\"30.19480519480519\" fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(91.9903027277341 33.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>8</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 131.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"43.0\" cy=\"43.0\" r=\"41.88311688311687\" fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(91.9903027277341 44.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>10</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(479.0484863613295 263.0 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"101.5\" width=\"44.970908183202305\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>n</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(228,26,28)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(55,126,184)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 46.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(77,175,74)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dV2Xxei\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"219b9189-2b9a-4998-ac43-03587b056fb8\").style.display = \"none\";</script>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"val data2 = mapOf(\n",
" \"x\" to listOf(1, 1, 1, 1, 1, 1.5, 1.5, 2, 2, 2),\n",
" \"y\" to listOf(1, 1, 1, 1, 1, 2, 2, 1.5, 1.5, 1.5),\n",
" \"s\" to listOf(3, 1, 2, 1, 4, 1, 3, 3, 3, 1),\n",
" \"n\" to listOf('a', 'b', 'a', 'c', 'a', 'a', 'b', 'c', 'a', 'b')\n",
")\n",
"\n",
"\n",
"letsPlot(data2) +\n",
" geomPie(hole = 0.3, tooltips = tooltipContent) { \n",
" x = \"x\"\n",
" y = \"y\"\n",
" fill = asDiscrete(\"n\", orderBy = \"..count..\", order = -1)\n",
" weight = \"s\"\n",
" size = \"..sum..\"\n",
" } +\n",
" xlim(0.5 to 2.5) + ylim(0.5 to 2.5)"
]
},
{
"cell_type": "markdown",
"id": "fa9e9195",
"metadata": {},
"source": [
"Mapping `fill` and `size` to the same variable:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "fc4c8b13",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:47.969814Z",
"iopub.status.busy": "2025-12-03T16:01:47.969485Z",
"iopub.status.idle": "2025-12-03T16:01:48.023912Z",
"shell.execute_reply": "2025-12-03T16:01:48.024032Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"n": [
"a",
"b",
"c"
],
"s": [
1.0,
2.0,
3.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "n",
"type": "str"
},
{
"column": "s",
"type": "int"
}
]
},
"kind": "plot",
"layers": [
{
"geom": "pie",
"mapping": {
"fill": "n",
"size": "n",
"slice": "s"
},
"position": "identity",
"stat": "identity"
}
],
"mapping": {},
"scales": [],
"theme": {
"axis": {
"blank": true
},
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"j9OSFr\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"j9OSFr\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"s\":[1.0,2.0,3.0],\n",
"\"n\":[\"a\",\"b\",\"c\"]\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[],\n",
"\"layers\":[{\n",
"\"mapping\":{\n",
"\"slice\":\"s\",\n",
"\"size\":\"n\",\n",
"\"fill\":\"n\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"}\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"str\",\n",
"\"column\":\"n\"\n",
"},{\n",
"\"type\":\"int\",\n",
"\"column\":\"s\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"15\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=16a6083d-2fe1-4519-9432-f2a5509f1102 width=\"100%\" height=\"100%\" style=\"max-width: 600.0px; max-height: 400.0px;\" viewBox=\"0 0 600.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pKbFpDY .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pKbFpDY .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pKbFpDY .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pKbFpDY .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pKbFpDY .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pKbFpDY .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pKbFpDY .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pKbFpDY .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA8FREq .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pKbFpDY .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pKbFpDY .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA8FREq .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pKbFpDY .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pKbFpDY .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA8FREq .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA8FREq .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dA8FREq .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pKbFpDY\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cw0XzsJ)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (466.0290918167977, 388.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 194.0 L227.10982724623221 190.5909090909091 A6.8181818181818175 6.8181818181818175 0.0 0 1 233.01454590839884 187.1818181818182 L233.01454590839884 194.0 A0.0 0.0 0.0 0 0 233.01454590839884 194.0 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 194.0 L233.01454590839884 166.72727272727272 A27.27272727272727 27.27272727272727 0.0 0 1 256.63342055706534 207.63636363636363 L233.01454590839884 194.0 A0.0 0.0 0.0 0 0 233.01454590839884 194.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 194.0 L274.34757654356525 217.86363636363637 A47.72727272727273 47.72727272727273 0.0 0 1 191.68151527323246 170.13636363636363 L233.01454590839884 194.0 A0.0 0.0 0.0 0 0 233.01454590839884 194.0 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M227.10982724623221 190.5909090909091 A6.8181818181818175 6.8181818181818175 0.0 0 1 233.01454590839884 187.1818181818182 M233.01454590839884 194.0 A0.0 0.0 0.0 0 0 233.01454590839884 194.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 166.72727272727272 A27.27272727272727 27.27272727272727 0.0 0 1 256.63342055706534 207.63636363636363 M233.01454590839884 194.0 A0.0 0.0 0.0 0 0 233.01454590839884 194.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M274.34757654356525 217.86363636363637 A47.72727272727273 47.72727272727273 0.0 0 1 191.68151527323246 170.13636363636363 M233.01454590839884 194.0 A0.0 0.0 0.0 0 0 233.01454590839884 194.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 194.0 L226.78506771981304 190.4034090909091 M233.01454590839884 194.0 L233.01454590839884 186.8068181818182 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 194.0 L233.01454590839884 166.35227272727272 M233.01454590839884 194.0 L256.95818008348454 207.82386363636363 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M233.01454590839884 194.0 L274.6723360699844 218.05113636363637 M233.01454590839884 194.0 L191.3567557468133 169.94886363636363 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cw0XzsJ\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"466.0290918167977\" height=\"388.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 388.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(475.0290918167977 92.25 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"215.5\" width=\"121.97090818320231\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>n</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"49.0\" cy=\"10.5\" r=\"6.8181818181818175\" fill=\"rgb(228,26,28)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(103.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>a</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"49.0\" cy=\"29.0\" r=\"27.27272727272727\" fill=\"rgb(55,126,184)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(103.9903027277341 30.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>b</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 83.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"49.0\" cy=\"49.0\" r=\"47.72727272727273\" fill=\"rgb(77,175,74)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(103.9903027277341 50.0 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>c</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dA8FREq\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"16a6083d-2fe1-4519-9432-f2a5509f1102\").style.display = \"none\";</script>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"letsPlot(data = mapOf(\"n\" to listOf(\"a\", \"b\", \"c\"), \"s\" to listOf(1, 2, 3))) + \n",
" geomPie(stat = Stat.identity) { fill = \"n\"; slice = \"s\"; size = \"n\" } +\n",
" blankTheme"
]
},
{
"cell_type": "markdown",
"id": "06bd6ffc",
"metadata": {},
"source": [
"## 3. Explode"
]
},
{
"cell_type": "markdown",
"id": "5f244752",
"metadata": {},
"source": [
"Use values to explode slices away from their center point, detaching it from the main pie."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "56e5d9b3",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:48.025542Z",
"iopub.status.busy": "2025-12-03T16:01:48.025320Z",
"iopub.status.idle": "2025-12-03T16:01:48.098097Z",
"shell.execute_reply": "2025-12-03T16:01:48.098169Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"data": {
"count": [
1109.0,
696.0,
353.0,
192.0,
168.0,
86.0,
74.0,
65.0,
53.0
],
"explode": [
0.0,
0.0,
0.0,
0.1,
0.1,
0.2,
0.3,
0.4,
0.6
],
"name": [
"20-50 km",
"50-75 km",
"10-20 km",
"75-100 km",
"3-5 km",
"7-10 km",
"5-7 km",
">100 km",
"2-3 km"
]
},
"data_meta": {
"series_annotations": [
{
"column": "name",
"type": "str"
},
{
"column": "count",
"type": "int"
},
{
"column": "explode",
"type": "int"
}
]
},
"kind": "plot",
"layers": [
{
"color": "black",
"geom": "pie",
"mapping": {
"explode": "explode",
"fill": "name",
"slice": "count"
},
"position": "identity",
"size": 20.0,
"stat": "identity",
"stroke": 1.0
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"high": "light_green",
"low": "dark_blue",
"scale_mapper_kind": "color_gradient"
}
],
"theme": {
"axis": {
"blank": true
},
"line": {
"blank": true
}
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"BmePl5\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"BmePl5\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"explode\":[0.0,0.0,0.0,0.1,0.1,0.2,0.3,0.4,0.6],\n",
"\"name\":[\"20-50 km\",\"50-75 km\",\"10-20 km\",\"75-100 km\",\"3-5 km\",\"7-10 km\",\"5-7 km\",\">100 km\",\"2-3 km\"],\n",
"\"count\":[1109.0,696.0,353.0,192.0,168.0,86.0,74.0,65.0,53.0]\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_gradient\",\n",
"\"high\":\"light_green\",\n",
"\"low\":\"dark_blue\"\n",
"}],\n",
"\"layers\":[{\n",
"\"mapping\":{\n",
"\"slice\":\"count\",\n",
"\"explode\":\"explode\",\n",
"\"fill\":\"name\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"size\":20.0,\n",
"\"color\":\"black\",\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"stroke\":1.0,\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"}\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"str\",\n",
"\"column\":\"name\"\n",
"},{\n",
"\"type\":\"int\",\n",
"\"column\":\"count\"\n",
"},{\n",
"\"type\":\"int\",\n",
"\"column\":\"explode\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"17\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=2c1db8cc-0bb4-44d3-8a79-36a03c0c452b width=\"100%\" height=\"100%\" style=\"max-width: 600.0px; max-height: 400.0px;\" viewBox=\"0 0 600.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#poJuUu9 .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#poJuUu9 .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#poJuUu9 .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#poJuUu9 .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#poJuUu9 .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#poJuUu9 .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#poJuUu9 .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#poJuUu9 .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d9UAa1K .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#poJuUu9 .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#poJuUu9 .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d9UAa1K .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#poJuUu9 .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#poJuUu9 .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d9UAa1K .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d9UAa1K .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#d9UAa1K .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"poJuUu9\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cUQ1rog)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (478.70648929740446, 388.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 194.0 L178.87901441115528 273.6421212498522 A100.0 100.0 0.0 0 1 239.35324464870223 94.0 L239.35324464870223 194.0 A0.0 0.0 0.0 0 0 239.35324464870223 194.0 \" fill=\"rgb(0,0,139)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 194.0 L239.35324464870223 94.0 A100.0 100.0 0.0 0 1 339.35097218857663 193.32584359304573 L239.35324464870223 194.0 A0.0 0.0 0.0 0 0 239.35324464870223 194.0 \" fill=\"rgb(53,37,142)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 194.0 L339.35097218857663 193.32584359304573 A100.0 100.0 0.0 0 1 309.9844274522588 264.7900841627595 L239.35324464870223 194.0 A0.0 0.0 0.0 0 0 239.35324464870223 194.0 \" fill=\"rgb(77,65,144)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M244.737291874738 202.426863916536 L315.36847467829455 273.21694807929555 A100.0 100.0 0.0 0 1 279.2910124987032 296.2673689825306 L244.737291874738 202.426863916536 A0.0 0.0 0.0 0 0 244.737291874738 202.426863916536 \" fill=\"rgb(95,93,146)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M240.98635646893922 203.8657460834243 L275.5400770929044 297.7062511494189 A100.0 100.0 0.0 0 1 238.51468265276733 303.835195559484 L240.98635646893922 203.8657460834243 A0.0 0.0 0.0 0 0 240.98635646893922 203.8657460834243 \" fill=\"rgb(109,121,147)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M236.93221527410768 213.85292464014685 L234.4605414579358 313.82237411620656 A100.0 100.0 0.0 0 1 215.30653707064857 311.48657684183615 L236.93221527410768 213.85292464014685 A0.0 0.0 0.0 0 0 236.93221527410768 213.85292464014685 \" fill=\"rgb(121,149,148)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M230.45538781924685 222.65009849620964 L208.82970961578775 320.283750697899 A100.0 100.0 0.0 0 1 192.96694919646788 315.3572555533977 L230.45538781924685 222.65009849620964 A0.0 0.0 0.0 0 0 230.45538781924685 222.65009849620964 \" fill=\"rgb(131,178,148)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M221.69193517240774 229.88980562196667 L184.20349654962877 322.59696267915473 A100.0 100.0 0.0 0 1 171.10923482792407 316.1532997887356 L221.69193517240774 229.88980562196667 A0.0 0.0 0.0 0 0 221.69193517240774 229.88980562196667 \" fill=\"rgb(138,208,146)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M205.97700164766007 243.8600682223298 L155.3943013031764 330.1235623890987 A100.0 100.0 0.0 0 1 145.50277141011316 323.502189472182 L205.97700164766007 243.8600682223298 A0.0 0.0 0.0 0 0 205.97700164766007 243.8600682223298 \" fill=\"rgb(144,238,144)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M178.87901441115528 273.6421212498522 A100.0 100.0 0.0 0 1 239.35324464870223 94.0 M239.35324464870223 194.0 A0.0 0.0 0.0 0 0 239.35324464870223 194.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 94.0 A100.0 100.0 0.0 0 1 339.35097218857663 193.32584359304573 M239.35324464870223 194.0 A0.0 0.0 0.0 0 0 239.35324464870223 194.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M339.35097218857663 193.32584359304573 A100.0 100.0 0.0 0 1 309.9844274522588 264.7900841627595 M239.35324464870223 194.0 A0.0 0.0 0.0 0 0 239.35324464870223 194.0 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M315.36847467829455 273.21694807929555 A100.0 100.0 0.0 0 1 279.2910124987032 296.2673689825306 M244.737291874738 202.426863916536 A0.0 0.0 0.0 0 0 244.737291874738 202.426863916536 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M275.5400770929044 297.7062511494189 A100.0 100.0 0.0 0 1 238.51468265276733 303.835195559484 M240.98635646893922 203.8657460834243 A0.0 0.0 0.0 0 0 240.98635646893922 203.8657460834243 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M234.4605414579358 313.82237411620656 A100.0 100.0 0.0 0 1 215.30653707064857 311.48657684183615 M236.93221527410768 213.85292464014685 A0.0 0.0 0.0 0 0 236.93221527410768 213.85292464014685 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M208.82970961578775 320.283750697899 A100.0 100.0 0.0 0 1 192.96694919646788 315.3572555533977 M230.45538781924685 222.65009849620964 A0.0 0.0 0.0 0 0 230.45538781924685 222.65009849620964 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M184.20349654962877 322.59696267915473 A100.0 100.0 0.0 0 1 171.10923482792407 316.1532997887356 M221.69193517240774 229.88980562196667 A0.0 0.0 0.0 0 0 221.69193517240774 229.88980562196667 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M155.3943013031764 330.1235623890987 A100.0 100.0 0.0 0 1 145.50277141011316 323.502189472182 M205.97700164766007 243.8600682223298 A0.0 0.0 0.0 0 0 205.97700164766007 243.8600682223298 \" fill=\"none\" stroke-width=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 194.0 L239.35324464870223 93.5 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 194.0 L239.35324464870223 93.5 M239.35324464870223 194.0 L339.85096082627604 193.32247281101095 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M239.35324464870223 194.0 L339.85096082627604 193.32247281101095 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cUQ1rog\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"478.70648929740446\" height=\"388.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 388.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(487.70648929740446 80.25 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"239.5\" width=\"109.29351070259553\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>name</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(0,0,139)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>20-50 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(53,37,142)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>50-75 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 46.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(77,65,144)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>10-20 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 69.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(95,93,146)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>75-100 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 92.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(109,121,147)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>3-5 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 115.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(121,149,148)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>7-10 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 138.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(131,178,148)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>5-7 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 161.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(138,208,146)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>>100 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 184.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(144,238,144)\" fill-opacity=\"1.0\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>2-3 km</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"d9UAa1K\">\n",
" </g>\n",
"</svg>\n",
" <script>document.getElementById(\"2c1db8cc-0bb4-44d3-8a79-36a03c0c452b\").style.display = \"none\";</script>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"val length = mapOf(\n",
" \"name\" to listOf(\"20-50 km\", \"50-75 km\", \"10-20 km\", \"75-100 km\", \"3-5 km\", \"7-10 km\", \"5-7 km\", \">100 km\", \"2-3 km\"),\n",
" \"count\" to listOf(1109, 696, 353, 192, 168, 86, 74, 65, 53),\n",
" \"explode\" to listOf(0, 0, 0, 0.1, 0.1, 0.2, 0.3, 0.4, 0.6)\n",
")\n",
"\n",
"ggplot(length) + blankTheme +\n",
" geomPie(stat = Stat.identity, stroke = 1, color = \"black\", size = 20) {\n",
" fill = \"name\"; slice = \"count\"; explode = \"explode\"\n",
" } +\n",
" scaleFillGradient(low = \"dark_blue\", high = \"light_green\")\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "5953f8aa",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-03T16:01:48.099210Z",
"iopub.status.busy": "2025-12-03T16:01:48.099071Z",
"iopub.status.idle": "2025-12-03T16:01:48.204903Z",
"shell.execute_reply": "2025-12-03T16:01:48.204978Z"
}
},
"outputs": [
{
"data": {
"application/plot+json": {
"apply_color_scheme": true,
"output": {
"figures": [
{
"data": {
"explode": [
0.1,
0.0,
0.0,
0.0
],
"label": [
"Apples",
"Bananas",
"Cherries",
"Dates"
],
"slice": [
35.0,
25.0,
25.0,
15.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "slice",
"type": "int"
},
{
"column": "label",
"type": "str"
},
{
"column": "explode",
"type": "float"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"geom": "pie",
"mapping": {
"explode": "explode",
"fill": "label",
"slice": "slice"
},
"position": "identity",
"size": 18.0,
"stat": "identity"
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"legend_position": "none",
"line": {
"blank": true
}
}
},
{
"data": {
"explode": [
0.1,
0.0,
0.0,
0.0
],
"label": [
"Apples",
"Bananas",
"Cherries",
"Dates"
],
"slice": [
35.0,
25.0,
25.0,
15.0
]
},
"data_meta": {
"series_annotations": [
{
"column": "slice",
"type": "int"
},
{
"column": "label",
"type": "str"
},
{
"column": "explode",
"type": "float"
}
]
},
"ggsize": {
"height": 250.0,
"width": 400.0
},
"kind": "plot",
"layers": [
{
"geom": "pie",
"hole": 0.8,
"mapping": {
"explode": "explode",
"fill": "label",
"slice": "slice"
},
"position": "identity",
"size": 18.0,
"stat": "identity"
}
],
"mapping": {},
"scales": [
{
"aesthetic": "fill",
"palette": "Set1",
"scale_mapper_kind": "color_brewer"
}
],
"theme": {
"axis": {
"blank": true
},
"line": {
"blank": true
}
}
}
],
"ggsize": {
"height": 250.0,
"width": 800.0
},
"kind": "subplots",
"layout": {
"align": false,
"fit": true,
"name": "grid",
"ncol": 2,
"nrow": 1
}
},
"output_type": "lets_plot_spec",
"swing_enabled": true
},
"text/html": [
" <div id=\"W59Cel\" ></div>\n",
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
" \n",
" (function() {\n",
" // ----------\n",
" \n",
" const forceImmediateRender = false;\n",
" const responsive = false;\n",
" \n",
" let sizing = {\n",
" width_mode: \"MIN\",\n",
" height_mode: \"SCALED\",\n",
" width: null, \n",
" height: null \n",
" };\n",
" \n",
" const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
" if (preferredWidth !== undefined) {\n",
" sizing = {\n",
" width_mode: 'FIXED',\n",
" height_mode: 'SCALED',\n",
" width: parseFloat(preferredWidth)\n",
" };\n",
" }\n",
" \n",
" const containerDiv = document.getElementById(\"W59Cel\");\n",
" let fig = null;\n",
" \n",
" function renderPlot() {\n",
" if (fig === null) {\n",
" const plotSpec = {\n",
"\"layout\":{\n",
"\"name\":\"grid\",\n",
"\"ncol\":2,\n",
"\"nrow\":1,\n",
"\"fit\":true,\n",
"\"align\":false\n",
"},\n",
"\"figures\":[{\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"slice\":[35.0,25.0,25.0,15.0],\n",
"\"explode\":[0.1,0.0,0.0,0.0],\n",
"\"label\":[\"Apples\",\"Bananas\",\"Cherries\",\"Dates\"]\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"mapping\":{\n",
"\"slice\":\"slice\",\n",
"\"explode\":\"explode\",\n",
"\"fill\":\"label\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"size\":18.0,\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"},\n",
"\"legend_position\":\"none\"\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"slice\"\n",
"},{\n",
"\"type\":\"str\",\n",
"\"column\":\"label\"\n",
"},{\n",
"\"type\":\"float\",\n",
"\"column\":\"explode\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"19\"\n",
"},{\n",
"\"mapping\":{\n",
"},\n",
"\"data\":{\n",
"\"slice\":[35.0,25.0,25.0,15.0],\n",
"\"explode\":[0.1,0.0,0.0,0.0],\n",
"\"label\":[\"Apples\",\"Bananas\",\"Cherries\",\"Dates\"]\n",
"},\n",
"\"ggsize\":{\n",
"\"width\":400.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"plot\",\n",
"\"scales\":[{\n",
"\"aesthetic\":\"fill\",\n",
"\"scale_mapper_kind\":\"color_brewer\",\n",
"\"palette\":\"Set1\"\n",
"}],\n",
"\"layers\":[{\n",
"\"hole\":0.8,\n",
"\"mapping\":{\n",
"\"slice\":\"slice\",\n",
"\"explode\":\"explode\",\n",
"\"fill\":\"label\"\n",
"},\n",
"\"stat\":\"identity\",\n",
"\"size\":18.0,\n",
"\"position\":\"identity\",\n",
"\"geom\":\"pie\",\n",
"\"data\":{\n",
"}\n",
"}],\n",
"\"theme\":{\n",
"\"axis\":{\n",
"\"blank\":true\n",
"},\n",
"\"line\":{\n",
"\"blank\":true\n",
"}\n",
"},\n",
"\"data_meta\":{\n",
"\"series_annotations\":[{\n",
"\"type\":\"int\",\n",
"\"column\":\"slice\"\n",
"},{\n",
"\"type\":\"str\",\n",
"\"column\":\"label\"\n",
"},{\n",
"\"type\":\"float\",\n",
"\"column\":\"explode\"\n",
"}]\n",
"},\n",
"\"spec_id\":\"20\"\n",
"}],\n",
"\"ggsize\":{\n",
"\"width\":800.0,\n",
"\"height\":250.0\n",
"},\n",
"\"kind\":\"subplots\"\n",
"};\n",
" window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
" } else {\n",
" fig.updateView({});\n",
" }\n",
" }\n",
" \n",
" const renderImmediately = \n",
" forceImmediateRender || (\n",
" sizing.width_mode === 'FIXED' && \n",
" (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
" );\n",
" \n",
" if (renderImmediately) {\n",
" renderPlot();\n",
" }\n",
" \n",
" if (!renderImmediately || responsive) {\n",
" // Set up observer for initial sizing or continuous monitoring\n",
" var observer = new ResizeObserver(function(entries) {\n",
" for (let entry of entries) {\n",
" if (entry.contentBoxSize && \n",
" entry.contentBoxSize[0].inlineSize > 0) {\n",
" if (!responsive && observer) {\n",
" observer.disconnect();\n",
" observer = null;\n",
" }\n",
" renderPlot();\n",
" if (!responsive) {\n",
" break;\n",
" }\n",
" }\n",
" }\n",
" });\n",
" \n",
" observer.observe(containerDiv);\n",
" }\n",
" \n",
" // ----------\n",
" })();\n",
" \n",
" </script> <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=778aca2d-f8d3-4c72-a7ee-cebc3ff0e4c2 width=\"100%\" height=\"100%\" style=\"max-width: 800.0px; max-height: 250.0px;\" viewBox=\"0 0 800.0 250.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#ptDGu3Y .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#ptDGu3Y .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
".axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
".axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#ptDGu3Y .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
".tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
".tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
".tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"ptDGu3Y\">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"250.0\" width=\"800.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\">\n",
" </rect>\n",
" </g>\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" width=\"392.0\" height=\"238.0\" x=\"6.0\" y=\"6.0\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pVg7KnT .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pVg7KnT .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVg7KnT .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVg7KnT .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pVg7KnT .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVg7KnT .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVg7KnT .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVg7KnT .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dl3B4hT .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVg7KnT .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pVg7KnT .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dl3B4hT .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVg7KnT .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pVg7KnT .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dl3B4hT .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dl3B4hT .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dl3B4hT .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pVg7KnT\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 238.0 L392.0 238.0 L392.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cYME39L)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (380.0, 226.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M181.98094128230468 108.91408550234408 L109.1694117885594 161.81475820866666 A90.0 90.0 0.0 0 1 181.98094128230468 18.91408550234408 L181.98094128230468 108.91408550234408 A0.0 0.0 0.0 0 0 181.98094128230468 108.91408550234408 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 113.0 L190.0 23.0 A90.0 90.0 0.0 0 1 280.0 113.0 L190.0 113.0 A0.0 0.0 0.0 0 0 190.0 113.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 113.0 L280.0 113.0 A90.0 90.0 0.0 0 1 190.0 203.0 L190.0 113.0 A0.0 0.0 0.0 0 0 190.0 113.0 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 113.0 L190.0 203.0 A90.0 90.0 0.0 0 1 117.18847050625475 165.9006727063226 L190.0 113.0 A0.0 0.0 0.0 0 0 190.0 113.0 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M109.1694117885594 161.81475820866666 A90.0 90.0 0.0 0 1 181.98094128230468 18.91408550234408 M181.98094128230468 108.91408550234408 A0.0 0.0 0.0 0 0 181.98094128230468 108.91408550234408 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 23.0 A90.0 90.0 0.0 0 1 280.0 113.0 M190.0 113.0 A0.0 0.0 0.0 0 0 190.0 113.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M280.0 113.0 A90.0 90.0 0.0 0 1 190.0 203.0 M190.0 113.0 A0.0 0.0 0.0 0 0 190.0 113.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 203.0 A90.0 90.0 0.0 0 1 117.18847050625475 165.9006727063226 M190.0 113.0 A0.0 0.0 0.0 0 0 190.0 113.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 113.0 L280.375 113.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 113.0 L280.375 113.0 M190.0 113.0 L190.0 203.375 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M190.0 113.0 L190.0 203.375 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cYME39L\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"380.0\" height=\"226.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 226.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 238.0 L392.0 238.0 L392.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dl3B4hT\">\n",
" </g>\n",
" </svg>\n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" width=\"392.0\" height=\"238.0\" x=\"402.0\" y=\"6.0\">\n",
" <style type=\"text/css\">\n",
" .plt-container {\n",
" font-family: sans-serif;\n",
" user-select: none;\n",
" -webkit-user-select: none;\n",
" -moz-user-select: none;\n",
" -ms-user-select: none;\n",
"}\n",
"text {\n",
" text-rendering: optimizeLegibility;\n",
"}\n",
"#pzRXlYh .plot-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 16.0px;\n",
"\n",
"}\n",
"#pzRXlYh .plot-subtitle {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pzRXlYh .plot-caption {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pzRXlYh .hyperlink-element {\n",
"fill: #118ed8;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"\n",
"}\n",
"#pzRXlYh .legend-title {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pzRXlYh .legend-item {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pzRXlYh .axis-title-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pzRXlYh .axis-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dciGPeS .axis-tooltip-text-x {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pzRXlYh .axis-title-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 15.0px;\n",
"\n",
"}\n",
"#pzRXlYh .axis-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dciGPeS .axis-tooltip-text-y {\n",
"fill: #ffffff;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pzRXlYh .facet-strip-text-x {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#pzRXlYh .facet-strip-text-y {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dciGPeS .tooltip-text {\n",
"fill: #474747;\n",
"font-weight: normal;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dciGPeS .tooltip-title {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"#dciGPeS .tooltip-label {\n",
"fill: #474747;\n",
"font-weight: bold;\n",
"font-style: normal;\n",
"font-family: sans-serif;\n",
"font-size: 13.0px;\n",
"\n",
"}\n",
"\n",
" </style>\n",
" <g id=\"pzRXlYh\">\n",
" <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 238.0 L392.0 238.0 L392.0 0.0 Z\">\n",
" </path>\n",
" <g transform=\"translate(6.0 6.0 ) \">\n",
" <g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"\">\n",
" <g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g clip-path=\"url(#cL4BtYt)\" clip-bounds-jfx=\"[rect (0.0, 0.0), (285.2785026964189, 226.0)]\">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g>\n",
" <g>\n",
" <path d=\"M76.37096903551792 151.23462366740213 L61.80866313676886 161.81475820866666 A90.0 90.0 0.0 0 1 134.62019263051414 18.91408550234408 L134.62019263051414 36.91408550234408 A72.0 72.0 0.0 0 0 76.37096903551792 151.23462366740213 \" fill=\"rgb(228,26,28)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M142.63925134820946 41.0 L142.63925134820946 23.0 A90.0 90.0 0.0 0 1 232.63925134820946 113.0 L214.63925134820946 113.0 A72.0 72.0 0.0 0 0 142.63925134820946 41.0 \" fill=\"rgb(55,126,184)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M214.63925134820946 113.0 L232.63925134820946 113.0 A90.0 90.0 0.0 0 1 142.63925134820946 203.0 L142.63925134820946 185.0 A72.0 72.0 0.0 0 0 214.63925134820946 113.0 \" fill=\"rgb(77,175,74)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M142.63925134820946 185.0 L142.63925134820946 203.0 A90.0 90.0 0.0 0 1 69.8277218544642 165.9006727063226 L84.39002775321325 155.32053816505808 A72.0 72.0 0.0 0 0 142.63925134820946 185.0 \" fill=\"rgb(152,78,163)\" stroke-width=\"1.0\" fill-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M61.80866313676886 161.81475820866666 A90.0 90.0 0.0 0 1 134.62019263051414 18.91408550234408 M134.62019263051414 36.91408550234408 A72.0 72.0 0.0 0 0 76.37096903551792 151.23462366740213 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M142.63925134820946 23.0 A90.0 90.0 0.0 0 1 232.63925134820946 113.0 M214.63925134820946 113.0 A72.0 72.0 0.0 0 0 142.63925134820946 41.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M232.63925134820946 113.0 A90.0 90.0 0.0 0 1 142.63925134820946 203.0 M142.63925134820946 185.0 A72.0 72.0 0.0 0 0 214.63925134820946 113.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M142.63925134820946 203.0 A90.0 90.0 0.0 0 1 69.8277218544642 165.9006727063226 M84.39002775321325 155.32053816505808 A72.0 72.0 0.0 0 0 142.63925134820946 185.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"\" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M214.26425134820946 113.0 L233.01425134820946 113.0 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M214.26425134820946 113.0 L233.01425134820946 113.0 M142.63925134820946 184.625 L142.63925134820946 203.375 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" <g>\n",
" <path d=\"M142.63925134820946 184.625 L142.63925134820946 203.375 \" fill=\"none\" stroke-width=\"0.75\" stroke=\"rgb(255,255,255)\" stroke-opacity=\"1.0\">\n",
" </path>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"cL4BtYt\">\n",
" <rect x=\"0.0\" y=\"0.0\" width=\"285.2785026964189\" height=\"226.0\">\n",
" </rect>\n",
" </clipPath>\n",
" </defs>\n",
" </g>\n",
" <g>\n",
" <g transform=\"translate(0.0 226.0 ) \">\n",
" </g>\n",
" <g transform=\"\">\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(294.2785026964189 56.75 ) \">\n",
" <rect x=\"0.0\" y=\"0.0\" height=\"124.5\" width=\"94.72149730358109\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\">\n",
" </rect>\n",
" <g transform=\"translate(5.0 5.0 ) \">\n",
" <g transform=\"translate(0.0 12.0 ) \">\n",
" <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"legend-title\">\n",
" <tspan>label</tspan>\n",
" </text>\n",
" </g>\n",
" <g transform=\"translate(0.0 22.5 ) \">\n",
" <g transform=\"\">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(228,26,28)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>Apples</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 23.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(55,126,184)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>Bananas</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 46.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(77,175,74)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>Cherries</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(0.0 69.0 ) \">\n",
" <g>\n",
" <g transform=\"translate(1.0 1.0 ) \">\n",
" <g>\n",
" <circle cx=\"10.5\" cy=\"10.5\" r=\"5.0\" fill=\"rgb(152,78,163)\" fill-opacity=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.75\">\n",
" </circle>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g transform=\"translate(26.9903027277341 11.5 ) \">\n",
" <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"legend-item\" dy=\"0.35em\">\n",
" <tspan>Dates</tspan>\n",
" </text>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 238.0 L392.0 238.0 L392.0 0.0 Z\" pointer-events=\"none\">\n",
" </path>\n",
" </g>\n",
" <g id=\"dciGPeS\">\n",
" </g>\n",
" </svg>\n",
"</svg>\n",
" <script>document.getElementById(\"778aca2d-f8d3-4c72-a7ee-cebc3ff0e4c2\").style.display = \"none\";</script>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"val calories = mapOf(\n",
" \"slice\" to listOf(35, 25, 25, 15),\n",
" \"label\" to listOf(\"Apples\", \"Bananas\", \"Cherries\", \"Dates\"),\n",
" \"explode\" to listOf(0.1, 0, 0, 0)\n",
")\n",
"\n",
"val p4 = ggplot(calories) +\n",
" blankTheme +\n",
" scaleFillBrewer(palette=\"Set1\") +\n",
" ggsize(w, h)\n",
"\n",
"gggrid(plots = listOf(\n",
" p4 + geomPie(stat = Stat.identity, size = 18) {\n",
" fill = \"label\"; slice = \"slice\"; explode = \"explode\"\n",
" } + theme().legendPositionNone(),\n",
" p4 + geomPie(stat = Stat.identity, size = 18, hole = 0.8) {\n",
" fill = \"label\"; slice = \"slice\"; explode = \"explode\"\n",
" }),\n",
" ncol = 2\n",
") + ggsize(2 * w, h)"
]
}
],
"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": "2.2.20-Beta2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}