{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e9cff123",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"bqD0Fs\"></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.3.0/js-package/distr/lets-plot.min.js\";\n",
       "           script.onload = function() {\n",
       "               window.letsPlotCall = function(f) {f();};\n",
       "               window.letsPlotCallQueue.forEach(function(f) {f();});\n",
       "               window.letsPlotCallQueue = [];\n",
       "               \n",
       "               \n",
       "           };\n",
       "           script.onerror = function(event) {\n",
       "               window.letsPlotCall = function(f) {};\n",
       "               window.letsPlotCallQueue = [];\n",
       "               var div = document.createElement(\"div\");\n",
       "               div.style.color = 'darkred';\n",
       "               div.textContent = 'Error loading Lets-Plot JS';\n",
       "               document.getElementById(\"bqD0Fs\").appendChild(div);\n",
       "           };\n",
       "           var e = document.getElementById(\"bqD0Fs\");\n",
       "           e.appendChild(script);\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%useLatestDescriptors\n",
    "%use lets-plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f27ed1dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Lets-Plot Kotlin API v.0.0.0-SNAPSHOT. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.3.0."
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "LetsPlot.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22bed5b6",
   "metadata": {},
   "source": [
    "#### Set `themeGrey()` as default theme. It improves plots readability."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "19e17aad",
   "metadata": {},
   "outputs": [],
   "source": [
    "LetsPlot.theme = themeGrey()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8493d965",
   "metadata": {},
   "source": [
    "#### Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "58d3ca1e",
   "metadata": {},
   "outputs": [],
   "source": [
    "val labelsData = mapOf(\n",
    "    \"x\" to listOf(0, 1, 2, 3, 4, 5, 6, 7, 8),\n",
    "    \"y\" to listOf(0, 45, 90, 135, 180, 225, 270, 315, 360),\n",
    "    \"r_y\" to listOf(360, 315, 270, 225, 180, 135, 90, 45, 0),\n",
    "    \"l\" to listOf(\"l0\", \"l45\", \"l90\", \"l135\", \"l180\", \"l225\", \"l270\", \"l315\", \"l360\"),\n",
    "    \"g\"  to listOf(\"g1\", \"g1\", \"g1\", \"g2\", \"g2\", \"g2\", \"g3\", \"g3\", \"g3\")\n",
    ")\n",
    "\n",
    "val lollipopData = mapOf(\n",
    "    \"c\" to listOf(\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"),\n",
    "    \"x\" to listOf(1, 2, 3, 4, 5, 6),\n",
    "    \"y\" to listOf(1, 2, 3, 4, 5, 6)\n",
    ")\n",
    "\n",
    "val studentData = mapOf(\n",
    "    \"subj\" to listOf(\"progr\", \"math\", \"physic\", \"chemistry\", \"biology\"),\n",
    "    \"subjId\" to listOf(1, 2, 3, 4, 5),\n",
    "    \"student\" to List(5) { \"John\" },\n",
    "    \"score\" to listOf(19, 15, 18, 12, 9)\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d66230d8",
   "metadata": {},
   "source": [
    "# Geoms"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1701efea",
   "metadata": {},
   "source": [
    "## `geomArea()`\n",
    "Line get transformed into a circle:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0e96441f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"Hi69mQ\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"area\",\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0],\n",
       "\"y\":[1.0,1.0]\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"area\",\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0],\n",
       "\"y\":[1.0,1.0]\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"Hi69mQ\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot() + geomArea() { x = listOf(0, 1); y = listOf(1, 1) }\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar()\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e71e86c1",
   "metadata": {},
   "source": [
    "### `flat = true`\n",
    "The plot can be transformed into a radar plot by using `flat = true` and a discrete x-scale."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "310d15d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"vUMk3w\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"subjId\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"area\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"subjId\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"data\":{\n",
       "\"score\":[19.0,15.0,18.0,12.0,9.0],\n",
       "\"subjId\":[1.0,2.0,3.0,4.0,5.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"breaks\":[1.0,2.0,3.0,4.0,5.0],\n",
       "\"labels\":[\"progr\",\"math\",\"physic\",\"chemistry\",\"biology\"]\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"scaleXContinuous\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"score\":[19.0,15.0,18.0,12.0,9.0],\n",
       "\"subjId\":[1.0,2.0,3.0,4.0,5.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"breaks\":[1.0,2.0,3.0,4.0,5.0],\n",
       "\"labels\":[\"progr\",\"math\",\"physic\",\"chemistry\",\"biology\"]\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"subjId\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"area\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"subjId\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"scaleXDiscrete\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"score\":[19.0,15.0,18.0,12.0,9.0],\n",
       "\"subjId\":[1.0,2.0,3.0,4.0,5.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"discrete\":true,\n",
       "\"breaks\":[1.0,2.0,3.0,4.0,5.0],\n",
       "\"labels\":[\"progr\",\"math\",\"physic\",\"chemistry\",\"biology\"]\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"subjId\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"area\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"subjId\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"vUMk3w\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(studentData) +\n",
    "    geomArea(flat = true) { x = \"subjId\"; y = \"score\" } +\n",
    "    geomPoint() { x = \"subjId\"; y = \"score\" }\n",
    "\n",
    "val labels = mapOf(1 to \"progr\", 2 to \"math\", 3 to \"physic\", 4 to \"chemistry\", 5 to \"biology\")\n",
    "\n",
    "val continuous = scaleXContinuous(labels = labels)\n",
    "val discrete = scaleXDiscrete(labels = labels)\n",
    "\n",
    "gggrid(listOf(\n",
    "    p + continuous,\n",
    "    p + continuous + coordPolar() + ggtitle(\"scaleXContinuous\"),\n",
    "    p + discrete + coordPolar() + ggtitle(\"scaleXDiscrete\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "302a6755",
   "metadata": {},
   "source": [
    "## `geomSegment()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2631a836",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"lGqXV4\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.0,\n",
       "\"arrow\":{\n",
       "\"name\":\"arrow\"\n",
       "},\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"yend\":4.0,\n",
       "\"position\":\"identity\",\n",
       "\"xend\":4.0,\n",
       "\"geom\":\"segment\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.0,\n",
       "\"arrow\":{\n",
       "\"name\":\"arrow\"\n",
       "},\n",
       "\"x\":8.0,\n",
       "\"y\":0.0,\n",
       "\"yend\":4.0,\n",
       "\"position\":\"identity\",\n",
       "\"xend\":4.0,\n",
       "\"geom\":\"segment\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.0,\n",
       "\"arrow\":{\n",
       "\"name\":\"arrow\"\n",
       "},\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"yend\":4.0,\n",
       "\"position\":\"identity\",\n",
       "\"xend\":4.0,\n",
       "\"geom\":\"segment\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.0,\n",
       "\"arrow\":{\n",
       "\"name\":\"arrow\"\n",
       "},\n",
       "\"x\":8.0,\n",
       "\"y\":0.0,\n",
       "\"yend\":4.0,\n",
       "\"position\":\"identity\",\n",
       "\"xend\":4.0,\n",
       "\"geom\":\"segment\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"lGqXV4\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot() +\n",
    "    geomSegment(x = 0, y = 0, xend = 4, yend = 4, arrow = arrow(), size = 1) +\n",
    "    geomSegment(x = 8, y = 0, xend = 4, yend = 4, arrow = arrow(), size = 1)\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar()\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "905a37de",
   "metadata": {},
   "source": [
    "`sizeEnd`/`strokeEnd` precision length adjustment parameters:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "adcba1b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"icL5wi\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"size\":\"size\",\n",
       "\"stroke\":\"stroke\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"red\",\n",
       "\"shape\":21.0,\n",
       "\"alpha\":0.5,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"size_start\":\"size\",\n",
       "\"size_end\":\"size_end\",\n",
       "\"stroke_start\":\"stroke\",\n",
       "\"stroke_end\":\"stroke_end\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":2.0,\n",
       "\"arrow\":{\n",
       "\"name\":\"arrow\",\n",
       "\"angle\":30.0,\n",
       "\"length\":22.0,\n",
       "\"ends\":\"both\",\n",
       "\"type\":\"open\"\n",
       "},\n",
       "\"yend\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"xend\":1.0,\n",
       "\"geom\":\"segment\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "\"size\":[8.0,10.0],\n",
       "\"x\":[0.0,1.0],\n",
       "\"stroke_end\":[2.0,0.0],\n",
       "\"y\":[0.0,0.0],\n",
       "\"stroke\":[1.0,2.0],\n",
       "\"size_end\":[10.0,0.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"size\",\n",
       "\"scale_mapper_kind\":\"identity\",\n",
       "\"guide\":\"none\"\n",
       "}]\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"xlim\":[-0.35,1.35],\n",
       "\"ylim\":[-2.0,2.0]\n",
       "},\n",
       "\"data\":{\n",
       "\"size\":[8.0,10.0],\n",
       "\"x\":[0.0,1.0],\n",
       "\"stroke_end\":[2.0,0.0],\n",
       "\"y\":[0.0,0.0],\n",
       "\"stroke\":[1.0,2.0],\n",
       "\"size_end\":[10.0,0.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"size\",\n",
       "\"scale_mapper_kind\":\"identity\",\n",
       "\"guide\":\"none\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"size\":\"size\",\n",
       "\"stroke\":\"stroke\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"red\",\n",
       "\"shape\":21.0,\n",
       "\"alpha\":0.5,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"size_start\":\"size\",\n",
       "\"size_end\":\"size_end\",\n",
       "\"stroke_start\":\"stroke\",\n",
       "\"stroke_end\":\"stroke_end\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":2.0,\n",
       "\"arrow\":{\n",
       "\"name\":\"arrow\",\n",
       "\"angle\":30.0,\n",
       "\"length\":22.0,\n",
       "\"ends\":\"both\",\n",
       "\"type\":\"open\"\n",
       "},\n",
       "\"yend\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"xend\":1.0,\n",
       "\"geom\":\"segment\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"icL5wi\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "// known problem - zero-length segment because of second datapoint.\n",
    "// this is a temp workaround to sync stroke/stroke_end and size/size_ens domains\n",
    "val d = mapOf( \n",
    "    \"x\" to listOf(0, 1),\n",
    "    \"y\" to listOf(0, 0),\n",
    "    \"size\" to listOf(8, 10), \n",
    "    \"stroke\" to listOf(1, 2),\n",
    "    \"size_end\" to listOf(10, 0), \n",
    "    \"stroke_end\" to listOf(2, 0)\n",
    ")\n",
    "\n",
    "val p = letsPlot(d) { x = \"x\"; y = \"y\" } +\n",
    "    geomPoint(shape = 21, alpha = 0.5, color = \"red\", showLegend = false) { size = \"size\"; stroke = \"stroke\" } +\n",
    "    geomSegment(xend = 1, yend = 0, size = 2,\n",
    "                arrow = arrow(ends = \"both\", type = \"open\", length = 22, angle = 30)) {\n",
    "        sizeStart = \"size\" \n",
    "        strokeStart = \"stroke\";\n",
    "        sizeEnd = \"size_end\"\n",
    "        strokeEnd = \"stroke_end\"\n",
    "    } +\n",
    "    scaleSizeIdentity()\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar(xlim = -0.35 to 1.35, ylim = -2 to 2) // lims are only to make the figure smiling\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6cdd2cb",
   "metadata": {},
   "source": [
    "## `geomLabel()`\n",
    "Regular scatter plot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "3a5077c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"FxWYsw\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"label\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"label\":\"l\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0],\n",
       "\"l\":[\"l0\",\"l45\",\"l90\",\"l135\",\"l180\",\"l225\",\"l270\",\"l315\",\"l360\"]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar()\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"label\":\"l\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0],\n",
       "\"l\":[\"l0\",\"l45\",\"l90\",\"l135\",\"l180\",\"l225\",\"l270\",\"l315\",\"l360\"]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"label\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"theta=y\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"label\":\"l\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0],\n",
       "\"l\":[\"l0\",\"l45\",\"l90\",\"l135\",\"l180\",\"l225\",\"l270\",\"l315\",\"l360\"]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"label\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"FxWYsw\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(labelsData) { x = \"x\"; y = \"y\"; label = \"l\" } + geomLabel()\n",
    "\n",
    "gggrid(listOf(\n",
    "    p, \n",
    "    p + coordPolar() + ggtitle(\"coordPolar()\"),\n",
    "    p + coordPolar(theta = \"y\") + ggtitle(\"theta=y\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7bd3a25e",
   "metadata": {},
   "source": [
    "## `geomPath()`\n",
    "The transform resamples path data by converting straight segments into curves. The `flat` parameter controls this behaviour."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "7b3acdd4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"PYZ1e9\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar()\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(), flat=true\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"x\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"flat\":true,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"PYZ1e9\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(labelsData) { x = \"x\"; y = \"y\"; color = \"y\" } + scaleColorBrewer(palette = \"GnBu\")\n",
    "\n",
    "gggrid(listOf(\n",
    "    p + geomPath(size = 3) + coordPolar() + ggtitle(\"coordPolar()\"),\n",
    "    p + geomPath(size = 3, flat = true) + coordPolar(theta = \"x\") + ggtitle(\"coordPolar(), flat=true\")\n",
    "), ncol=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b92bad8b",
   "metadata": {},
   "source": [
    "### Autoclose on a discrete x-scale"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "82e42a31",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"ANXA8v\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"ylim\":[0.0,20.0]\n",
       "},\n",
       "\"data\":{\n",
       "\"score\":[19.0,15.0,18.0,12.0,9.0],\n",
       "\"subj\":[\"progr\",\"math\",\"physic\",\"chemistry\",\"biology\"]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"subj\",\n",
       "\"y\":\"score\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "}\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"ANXA8v\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ggplot(studentData) + geomPath(flat = true) { x = \"subj\"; y = \"score\" } + coordPolar(ylim = 0 to 20)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a5a9f07e",
   "metadata": {},
   "source": [
    "## `geomLollipop()`\n",
    "See the `Params` section for details on using the `ylim` parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "97bbaa08",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"KsT9v8\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"lollipop\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "\"x\":\"c\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "\"c\":[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],\n",
       "\"y\":[1.0,2.0,3.0,4.0,5.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"c\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"c\":[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],\n",
       "\"y\":[1.0,2.0,3.0,4.0,5.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"lollipop\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"KsT9v8\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(lollipopData) { x = \"c\"; y = \"y\" } + geomLollipop()\n",
    "\n",
    "gggrid(listOf(\n",
    "    p, \n",
    "    p + coordPolar()\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "151574dc",
   "metadata": {},
   "source": [
    "## `geomBar()` \n",
    "This works similarly to rects, but with the addition of tooltips."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7e89e70",
   "metadata": {},
   "source": [
    "### `position='stack'`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "37245cb7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"dLdxKl\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"fill\":\"foo\"\n",
       "},\n",
       "\"stat\":\"count\",\n",
       "\"size\":0.0,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"bar\",\n",
       "\"data_meta\":{\n",
       "\"mapping_annotations\":[{\n",
       "\"aes\":\"fill\",\n",
       "\"annotation\":\"as_discrete\",\n",
       "\"parameters\":{\n",
       "\"label\":\"foo\",\n",
       "\"order\":1\n",
       "}\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "\"..x..\":[0.0,0.0,0.0],\n",
       "\"..count..\":[7.0,4.0,3.0],\n",
       "\"foo\":[1.0,2.0,3.0]\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"data\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"position=stack, coord_polar(theta=y)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"fill\":\"foo\"\n",
       "},\n",
       "\"stat\":\"count\",\n",
       "\"size\":0.0,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"bar\",\n",
       "\"data_meta\":{\n",
       "\"mapping_annotations\":[{\n",
       "\"aes\":\"fill\",\n",
       "\"annotation\":\"as_discrete\",\n",
       "\"parameters\":{\n",
       "\"label\":\"foo\",\n",
       "\"order\":1\n",
       "}\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "\"..x..\":[0.0,0.0,0.0],\n",
       "\"..count..\":[7.0,4.0,3.0],\n",
       "\"foo\":[1.0,2.0,3.0]\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"position=stack, coord_polar(theta=x)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"x\"\n",
       "},\n",
       "\"data\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"fill\":\"foo\"\n",
       "},\n",
       "\"stat\":\"count\",\n",
       "\"size\":0.0,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"bar\",\n",
       "\"data_meta\":{\n",
       "\"mapping_annotations\":[{\n",
       "\"aes\":\"fill\",\n",
       "\"annotation\":\"as_discrete\",\n",
       "\"parameters\":{\n",
       "\"label\":\"foo\",\n",
       "\"order\":1\n",
       "}\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "\"..x..\":[0.0,0.0,0.0],\n",
       "\"..count..\":[7.0,4.0,3.0],\n",
       "\"foo\":[1.0,2.0,3.0]\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"dLdxKl\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val barData = mapOf(\"foo\" to listOf(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3))\n",
    "val p = letsPlot(barData) + geomBar(size = 0) { fill = asDiscrete(\"foo\", order = 1) }\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar(theta=\"y\") + ggtitle(\"position=stack, coord_polar(theta=y)\"),\n",
    "    p + coordPolar(theta=\"x\") + ggtitle(\"position=stack, coord_polar(theta=x)\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56d2d740",
   "metadata": {},
   "source": [
    "### `position='dodge'`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "79aeaf6f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"tBlUUj\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"fill\":\"foo\"\n",
       "},\n",
       "\"stat\":\"count\",\n",
       "\"size\":0.0,\n",
       "\"position\":\"dodge\",\n",
       "\"geom\":\"bar\",\n",
       "\"data_meta\":{\n",
       "\"mapping_annotations\":[{\n",
       "\"aes\":\"fill\",\n",
       "\"annotation\":\"as_discrete\",\n",
       "\"parameters\":{\n",
       "\"label\":\"foo\",\n",
       "\"order\":1\n",
       "}\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "\"..x..\":[0.0,0.0,0.0],\n",
       "\"..count..\":[7.0,4.0,3.0],\n",
       "\"foo\":[1.0,2.0,3.0]\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"data\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"position=dodge, coord_polar(theta=y)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"fill\":\"foo\"\n",
       "},\n",
       "\"stat\":\"count\",\n",
       "\"size\":0.0,\n",
       "\"position\":\"dodge\",\n",
       "\"geom\":\"bar\",\n",
       "\"data_meta\":{\n",
       "\"mapping_annotations\":[{\n",
       "\"aes\":\"fill\",\n",
       "\"annotation\":\"as_discrete\",\n",
       "\"parameters\":{\n",
       "\"label\":\"foo\",\n",
       "\"order\":1\n",
       "}\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "\"..x..\":[0.0,0.0,0.0],\n",
       "\"..count..\":[7.0,4.0,3.0],\n",
       "\"foo\":[1.0,2.0,3.0]\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"position=dodge, coord_polar(theta=x)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"x\"\n",
       "},\n",
       "\"data\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"fill\":\"foo\"\n",
       "},\n",
       "\"stat\":\"count\",\n",
       "\"size\":0.0,\n",
       "\"position\":\"dodge\",\n",
       "\"geom\":\"bar\",\n",
       "\"data_meta\":{\n",
       "\"mapping_annotations\":[{\n",
       "\"aes\":\"fill\",\n",
       "\"annotation\":\"as_discrete\",\n",
       "\"parameters\":{\n",
       "\"label\":\"foo\",\n",
       "\"order\":1\n",
       "}\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "\"..x..\":[0.0,0.0,0.0],\n",
       "\"..count..\":[7.0,4.0,3.0],\n",
       "\"foo\":[1.0,2.0,3.0]\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"tBlUUj\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(barData) + geomBar(size = 0, position = positionDodge()) { fill = asDiscrete(\"foo\", order = 1) }\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar(theta=\"y\") + ggtitle(\"position=dodge, coord_polar(theta=y)\"),\n",
    "    p + coordPolar(theta=\"x\") + ggtitle(\"position=dodge, coord_polar(theta=x)\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d076e78b",
   "metadata": {},
   "source": [
    "### `stat='identity'`\n",
    "On a continuous x-scale the first and last bars stuck. The `expand` parameter can be used to fix this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "1fce12df",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"KF0w35\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"Continuous x\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0],\n",
       "\"y\":[5.0,3.0,4.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"width\":0.8,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"bar\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"scaleXContinuous(expand=[0, 0.1))\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0],\n",
       "\"y\":[5.0,3.0,4.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"expand\":[0,0.1]\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"width\":0.8,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"bar\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"KF0w35\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val data = mapOf(\n",
    "    \"x\" to listOf(1, 2, 3),\n",
    "    \"y\" to listOf(5, 3, 4)\n",
    ")\n",
    "\n",
    "val barId = letsPlot(data) + geomBar(stat = Stat.identity, width = 0.8) { x = \"x\"; y = \"y\" } + coordPolar()\n",
    "\n",
    "gggrid(listOf(\n",
    "    barId + ggtitle(\"Continuous x\"),\n",
    "    barId + scaleXContinuous(expand = listOf(0, 0.1)) + ggtitle(\"scaleXContinuous(expand=[0, 0.1))\")\n",
    "))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "1372b27c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"MnFd3K\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"ggtitle\":{\n",
       "\"text\":\"Discrete x\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0],\n",
       "\"y\":[5.0,3.0,4.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"discrete\":true\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"width\":0.8,\n",
       "\"position\":\"stack\",\n",
       "\"geom\":\"bar\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "}\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"MnFd3K\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "barId + scaleXDiscrete() + ggtitle(\"Discrete x\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7084648",
   "metadata": {},
   "source": [
    "## `geomHLine()`/`geomVLine()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "4506efab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"yDf20Q\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":5.0,\n",
       "\"color\":\"red\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":10.0,\n",
       "\"color\":\"green\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":15.0,\n",
       "\"color\":\"blue\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":20.0,\n",
       "\"color\":\"orange\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"pink\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":10.0,\n",
       "\"geom\":\"vline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"magenta\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":20.0,\n",
       "\"geom\":\"vline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"dark_green\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":30.0,\n",
       "\"geom\":\"vline\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"limits\":[0.0,30.0]\n",
       "},{\n",
       "\"aesthetic\":\"y\",\n",
       "\"limits\":[0.0,20.0]\n",
       "}]\n",
       "},{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":5.0,\n",
       "\"color\":\"red\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":10.0,\n",
       "\"color\":\"green\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":15.0,\n",
       "\"color\":\"blue\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"yintercept\":20.0,\n",
       "\"color\":\"orange\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"hline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"pink\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":10.0,\n",
       "\"geom\":\"vline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"magenta\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":20.0,\n",
       "\"geom\":\"vline\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"dark_green\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":30.0,\n",
       "\"geom\":\"vline\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"limits\":[0.0,30.0]\n",
       "},{\n",
       "\"aesthetic\":\"y\",\n",
       "\"limits\":[0.0,20.0]\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"yDf20Q\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot() +\n",
    "    geomHLine(yintercept = 5,  color = \"red\") +\n",
    "    geomHLine(yintercept = 10, color = \"green\") +\n",
    "    geomHLine(yintercept = 15, color = \"blue\") +\n",
    "    geomHLine(yintercept = 20, color = \"orange\") +\n",
    "    geomVLine(xintercept = 10, color = \"pink\") +\n",
    "    geomVLine(xintercept = 20, color = \"magenta\") +\n",
    "    geomVLine(xintercept = 30, color = \"dark_green\") +\n",
    "    xlim(0 to 30) +\n",
    "    ylim(0 to 20)\n",
    "    \n",
    "gggrid(listOf(p, p + coordPolar()))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc107ee4",
   "metadata": {},
   "source": [
    "## `geomTile()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "4a7349b8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"yjnFA5\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"tile\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"fill\":\"fill\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"fill\",\n",
       "\"scale_mapper_kind\":\"color_hue\"\n",
       "}],\n",
       "\"data\":{\n",
       "\"x\":[0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96],\n",
       "\"y\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],\n",
       "\"fill\":[-0.8390715290764524,-0.8330374595617269,-0.8150214639187641,-0.7852549476461197,-0.7438112827472775,-0.6892215266032644,-0.6152810204151956,-0.5076308890007755,-0.34512535381544396,-0.8390715290764524,-0.8231810766885503,-0.7954740743570979,-0.7566296693349871,-0.7071698592703262,-0.6460632625930007,-0.5675196754338458,-0.4575597154025272,-0.2953707445915619,-0.8390715290764524,-0.8130579903474421,-0.7748958609848972,-0.7257985091939805,-0.6668617660117347,-0.597648753431217,-0.5129641562892151,-0.3994028388588531,-0.23668462968907183,-0.8390715290764524,-0.8026714803298189,-0.753313490286524,-0.6928513490416044,-0.6230958698730636,-0.5443698920072552,-0.45225018027885505,-0.3340823370639986,-0.17028182300992828,-0.8390715290764524,-0.7920249117740684,-0.7307549299936951,-0.657884239453171,-0.5760989552636295,-0.48665794587511463,-0.38608522714740445,-0.26263386704188557,-0.0975368754647962,-0.8390715290764524,-0.7811217340752652,-0.7072494128432085,-0.6209991197453719,-0.5261145489579291,-0.42498006634358393,-0.31524029506071427,-0.1861902447965802,-0.01995562150398114,-0.8390715290764524,-0.769965479767605,-0.6828273986954134,-0.5823035207934633,-0.47340165819811186,-0.3598355071040994,-0.2405409164209597,-0.10596348450643661,0.06085599194624228]\n",
       "}\n",
       "},{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"tile\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"fill\":\"fill\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"ylim\":[-0.5,null]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"fill\",\n",
       "\"scale_mapper_kind\":\"color_hue\"\n",
       "}],\n",
       "\"data\":{\n",
       "\"x\":[0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96,0.0,0.12,0.24,0.36,0.48,0.6,0.72,0.84,0.96],\n",
       "\"y\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.15,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.3,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.44999999999999996,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9,0.9],\n",
       "\"fill\":[-0.8390715290764524,-0.8330374595617269,-0.8150214639187641,-0.7852549476461197,-0.7438112827472775,-0.6892215266032644,-0.6152810204151956,-0.5076308890007755,-0.34512535381544396,-0.8390715290764524,-0.8231810766885503,-0.7954740743570979,-0.7566296693349871,-0.7071698592703262,-0.6460632625930007,-0.5675196754338458,-0.4575597154025272,-0.2953707445915619,-0.8390715290764524,-0.8130579903474421,-0.7748958609848972,-0.7257985091939805,-0.6668617660117347,-0.597648753431217,-0.5129641562892151,-0.3994028388588531,-0.23668462968907183,-0.8390715290764524,-0.8026714803298189,-0.753313490286524,-0.6928513490416044,-0.6230958698730636,-0.5443698920072552,-0.45225018027885505,-0.3340823370639986,-0.17028182300992828,-0.8390715290764524,-0.7920249117740684,-0.7307549299936951,-0.657884239453171,-0.5760989552636295,-0.48665794587511463,-0.38608522714740445,-0.26263386704188557,-0.0975368754647962,-0.8390715290764524,-0.7811217340752652,-0.7072494128432085,-0.6209991197453719,-0.5261145489579291,-0.42498006634358393,-0.31524029506071427,-0.1861902447965802,-0.01995562150398114,-0.8390715290764524,-0.769965479767605,-0.6828273986954134,-0.5823035207934633,-0.47340165819811186,-0.3598355071040994,-0.2405409164209597,-0.10596348450643661,0.06085599194624228]\n",
       "}\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"yjnFA5\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fun meshgridPoints(x:List<Double>, y:List<Double>):List<Pair<Double, Double>> {\n",
    "  val xSer = y.flatMap { x }\n",
    "  var yInd = -1\n",
    "  val ySer = y.flatMap { \n",
    "      yInd++\n",
    "      List(x.size) {y[yInd]} \n",
    "  }\n",
    "  return xSer.zip(ySer)\n",
    "}\n",
    "\n",
    "val gridPoints = meshgridPoints(\n",
    "    generateSequence(0.0, {it + 6.0/50} ).takeWhile { it <= 1.0 }.toList(),\n",
    "    generateSequence(0.0, {it + 6.0/40} ).takeWhile { it <= 1.0 }.toList())\n",
    "fun f(x:Double, y:Double): Double {\n",
    "    return sin(x).pow(10) + cos(10 + y * x) * cos(x)\n",
    "}\n",
    "\n",
    "val X = gridPoints.map { it.first }\n",
    "val Y = gridPoints.map { it.second }\n",
    "val Z = gridPoints.map { f(it.first, it.second) }\n",
    "\n",
    "val p = letsPlot {x=X; y=Y; fill=Z} + geomTile() + scaleFillHue()\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar(ylim = -0.5 to null)  // ylim to make a hole\n",
    "\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a56f044",
   "metadata": {},
   "source": [
    "## `geomRect()`"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da9e662a",
   "metadata": {},
   "source": [
    "### Stacked bars\n",
    "are transformed into a pie chart"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "0debeeb6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"W6Ip2r\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":7.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":11.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":11.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":14.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar()\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":7.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":11.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":11.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":14.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=y)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":7.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":11.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":11.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":14.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"W6Ip2r\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "   <div id=\"OUYwj8\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=y, dir=-1)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\",\n",
       "\"direction\":-1.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":7.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":11.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":11.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":14.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=y, dir=-1, start=PI/2)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"start\":1.57,\n",
       "\"theta\":\"y\",\n",
       "\"direction\":-1.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":7.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":11.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":11.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":14.0,\n",
       "\"xmax\":5.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"OUYwj8\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "val c1 = \"#66c2a5\"\n",
    "val c2 = \"#fc8d62\"\n",
    "val c3 = \"#8da0cb\"\n",
    "val p = ggplot() + \n",
    "    geomRect(xmin=0, xmax=5, ymin=0, ymax=7, fill=c1, size=0) +\n",
    "    geomRect(xmin=0, xmax=5, ymin=7, ymax=11, fill=c2, size=0) +\n",
    "    geomRect(xmin=0, xmax=5, ymin=11, ymax=14, fill=c3, size=0) \n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar() + ggtitle(\"coordPolar()\"),\n",
    "    p + coordPolar(theta = \"y\") + ggtitle(\"coordPolar(theta=y)\"),\n",
    ")).show()\n",
    "\n",
    "gggrid(listOf(\n",
    "    p + coordPolar(theta = \"y\", direction = -1) + ggtitle(\"coordPolar(theta=y, dir=-1)\"),\n",
    "    p + coordPolar(theta = \"y\", direction = -1, start = 3.14/2) + \n",
    "        ggtitle(\"coordPolar(theta=y, dir=-1, start=PI/2)\"),\n",
    ")).show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3ddc05c",
   "metadata": {},
   "source": [
    "### Dodged bars"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "4c7e6d24",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"nOwjos\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":1.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":1.0,\n",
       "\"ymax\":4.0,\n",
       "\"xmax\":2.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":2.0,\n",
       "\"ymax\":3.0,\n",
       "\"xmax\":3.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=y)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":1.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":1.0,\n",
       "\"ymax\":4.0,\n",
       "\"xmax\":2.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":2.0,\n",
       "\"ymax\":3.0,\n",
       "\"xmax\":3.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=x)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"x\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":7.0,\n",
       "\"xmax\":1.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":1.0,\n",
       "\"ymax\":4.0,\n",
       "\"xmax\":2.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":2.0,\n",
       "\"ymax\":3.0,\n",
       "\"xmax\":3.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"nOwjos\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot() +\n",
    "    geomRect(xmin=0, xmax=1, ymin=0, ymax=7, fill=c1, size=0) +\n",
    "    geomRect(xmin=1, xmax=2, ymin=0, ymax=4, fill=c2, size=0) +\n",
    "    geomRect(xmin=2, xmax=3, ymin=0, ymax=3, fill=c3, size=0)\n",
    "\n",
    "gggrid(listOf(\n",
    "    p, \n",
    "    p + coordPolar(theta = \"y\") + ggtitle(\"coordPolar(theta=y)\"),\n",
    "    p + coordPolar(theta = \"x\") + ggtitle(\"coordPolar(theta=x)\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cdc326c",
   "metadata": {},
   "source": [
    "### Horizontal bars"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "20755414",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"sx0dzz\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":1.0,\n",
       "\"xmax\":7.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":1.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":2.0,\n",
       "\"xmax\":4.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":2.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":3.0,\n",
       "\"xmax\":3.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=y)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"y\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":1.0,\n",
       "\"xmax\":7.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":1.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":2.0,\n",
       "\"xmax\":4.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":2.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":3.0,\n",
       "\"xmax\":3.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(theta=x)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"theta\":\"x\"\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"ymin\":0.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":1.0,\n",
       "\"xmax\":7.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#66c2a5\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":1.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":2.0,\n",
       "\"xmax\":4.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#fc8d62\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"ymin\":2.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":0.0,\n",
       "\"ymax\":3.0,\n",
       "\"xmax\":3.0,\n",
       "\"size\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"rect\",\n",
       "\"fill\":\"#8da0cb\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"sx0dzz\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot() +\n",
    "    geomRect(ymin=0, ymax=1, xmin=0, xmax=7, fill=c1, size=0) +\n",
    "    geomRect(ymin=1, ymax=2, xmin=0, xmax=4, fill=c2, size=0) +\n",
    "    geomRect(ymin=2, ymax=3, xmin=0, xmax=3, fill=c3, size=0)\n",
    "\n",
    "gggrid(listOf(\n",
    "    p, \n",
    "    p + coordPolar(theta = \"y\") + ggtitle(\"coordPolar(theta=y)\"),\n",
    "    p + coordPolar(theta = \"x\") + ggtitle(\"coordPolar(theta=x)\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7377309b",
   "metadata": {},
   "source": [
    "# Params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a72b8335",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"jbMFkc\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"ggtitle\":{\n",
       "\"text\":\"Default plot with coordPolar()\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "}\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"jbMFkc\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(labelsData) { x = \"x\"; y = \"y\"; color = \"y\" } + \n",
    "    geomPath(size = 3, showLegend = false) + \n",
    "    scaleColorBrewer(palette = \"GnBu\")\n",
    "\n",
    "\n",
    "p + coordPolar() + ggtitle(\"Default plot with coordPolar()\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "666e916a",
   "metadata": {},
   "source": [
    "### `transformBkgr`  \n",
    "\n",
    "When using the `transformBkgr` parameter, the panel is not transformed into a circle, but remains a rectangle. This behaviour is similar to `ggplot2`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "2d5572bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"6APXT6\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(transformBkgr=false)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"transform_bkgr\":false\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "}\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"6APXT6\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p + coordPolar(transformBkgr = false) + ggtitle(\"coordPolar(transformBkgr=false)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6443e8f5",
   "metadata": {},
   "source": [
    "### `direction`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "66cbe28c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"jpGHWs\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"ggtitle\":{\n",
       "\"text\":\"coordPolar(direction=-1)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"direction\":-1.0\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "}\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"jpGHWs\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p + coordPolar(direction = -1) + ggtitle(\"coordPolar(direction=-1)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7dff898f",
   "metadata": {},
   "source": [
    "### `start`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "f5619d05",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"ASUPVa\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"start=PI/2\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"start\":1.57\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"start=-PI/2\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"start\":-1.57\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"ASUPVa\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    p + coordPolar(start = 3.14 / 2) + ggtitle(\"start=PI/2\"),\n",
    "    p + coordPolar(start = -3.14 / 2) + ggtitle(\"start=-PI/2\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3b202e6",
   "metadata": {},
   "source": [
    "### `direction` + `start`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "c21555ea",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"jY1cUg\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"dir=-1, start=PI/2\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"start\":1.57,\n",
       "\"direction\":-1.0\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"dir=-1, start=-PI/2\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"start\":-1.57,\n",
       "\"direction\":-1.0\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"show_legend\":false,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"jY1cUg\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    p + coordPolar(start = 3.14 / 2, direction=-1) + ggtitle(\"dir=-1, start=PI/2\"),\n",
    "    p + coordPolar(start = -3.14 / 2, direction=-1) + ggtitle(\"dir=-1, start=-PI/2\"),\n",
    "))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03db5bf4",
   "metadata": {},
   "source": [
    "### `xlim` and `ylim`\n",
    "The `xlim` parameter can be used to prevent overlap between the first and last values.  \n",
    "The `ylim` parameter can be used to shift data away from the centre or the outer circle.\n",
    "\n",
    "To prevent overlap between `6` and `1`, we adjust the `xlim` to `[null, 7]` while keeping the default minimum limit as it is not relevant.  \n",
    "In addition, we change `ylim` to `[null, 6.5]` to prevent the lollipop's top from overlapping with the outer circle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "3f4cf47a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"fA5dS8\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0,4.0,5.0,6.0],\n",
       "\"y\":[1.0,2.0,3.0,4.0,5.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"lollipop\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"xlim\":[null,7.0],\n",
       "\"ylim\":[null,6.5]\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0,4.0,5.0,6.0],\n",
       "\"y\":[1.0,2.0,3.0,4.0,5.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"lollipop\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"fA5dS8\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p = letsPlot(lollipopData) { x = \"x\"; y = \"y\" } + geomLollipop()\n",
    "\n",
    "gggrid(listOf(\n",
    "    p + coordPolar(),\n",
    "    p + coordPolar(xlim = null to 7, ylim = null to 6.5)\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "501d6bb5",
   "metadata": {},
   "source": [
    "# Scales  \n",
    "Interaction between scales and polar coordinate system."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "4ac54b1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "val pie = letsPlot() +\n",
    "    geomRect(xmin=0, xmax=1, ymin=0, ymax=7, fill=\"red\", size=0) +\n",
    "    geomRect(xmin=1, xmax=2, ymin=0, ymax=4, fill=\"blue\", size=0) +\n",
    "    geomRect(xmin=2, xmax=3, ymin=0, ymax=3, fill=\"green\", size=0) +\n",
    "    coordPolar()\n",
    "\n",
    "val sticksData = mapOf(\n",
    "    'x' to listOf(0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5),\n",
    "    'y' to listOf(0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6),\n",
    "    'g' to listOf(5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0)\n",
    ")\n",
    "\n",
    "val sticks = letsPlot(sticksData) + geomPath{ x='x'; y='y'; group='g'; size='g' } + coordPolar()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "82bc6009",
   "metadata": {},
   "source": [
    "## Limit\n",
    "The `limits` parameter sets the lower and upper limits individually, but expects absolute values.  \n",
    "`x=[null, 6]` limit to make the first and last elements not overlap.    \n",
    "`y=[-2, 7]` limit to make a medium sized centre hole and a small outer buffer (with a length of 1)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "c3759240",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"9npk1I\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"No limits\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"lims(x=[null, 6], y=[-2, 7])\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"limits\":[null,6.0]\n",
       "},{\n",
       "\"aesthetic\":\"y\",\n",
       "\"limits\":[-2.0,7.0]\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"9npk1I\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    sticks + ggtitle(\"No limits\"),\n",
    "    sticks + lims(x = null to 6, y = -2 to 7) + ggtitle(\"lims(x=[null, 6], y=[-2, 7])\"),\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "750b185e",
   "metadata": {},
   "source": [
    "## Discrete x-scale\n",
    "\n",
    "If the x-scale is discrete, the coordinate system will automatically adjust domain so that the first and last values don't overlap."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f1899ecf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"TyLdYL\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"Continuous\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"scaleXDiscrete()\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"discrete\":true\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"TyLdYL\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    sticks + ggtitle(\"Continuous\"), \n",
    "    sticks + scaleXDiscrete() + ggtitle(\"scaleXDiscrete()\")\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38f9d4dc",
   "metadata": {},
   "source": [
    "## clip-path\n",
    "\n",
    "Segments should not get rendered outside the panel boundaries."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "cbc4db9e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"EUCko4\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\",\n",
       "\"ylim\":[0.0,1.5]\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"EUCko4\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    sticks,\n",
    "    sticks + coordPolar(ylim = 0 to 1.5)\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c436bf7",
   "metadata": {},
   "source": [
    "## Expand\n",
    "By default `coordPolar()` resets the expansion to zero, but it can still be set explicitly.  \n",
    "Horizontal non-zero expand will produce a gap between first and last sectors, so the plot will never become a circle.  \n",
    "Vertical non-zero expand creates a central hole (expand for the bottom of the domain) and a buffer between the plot and the axis (expand for the top of the domain).  \n",
    "\n",
    "`expand` is symmetric, so it can't be used to adjust only the bottom or only the top."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "a6c0d738",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"vjDClK\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"No expand\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"scale_XY_continuous(expand=...)\"\n",
       "},\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"g\":[5.0,5.0,4.0,4.0,3.0,3.0,2.0,2.0,1.0,1.0,0.0,0.0],\n",
       "\"x\":[0.0,0.0,1.0,1.0,2.0,2.0,3.0,3.0,4.0,4.0,5.0,5.0],\n",
       "\"y\":[0.0,1.0,0.0,2.0,0.0,3.0,0.0,4.0,0.0,5.0,0.0,6.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"expand\":[0,2.5]\n",
       "},{\n",
       "\"aesthetic\":\"y\",\n",
       "\"expand\":[0,2]\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"size\":\"g\",\n",
       "\"group\":\"g\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"vjDClK\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    sticks + ggtitle(\"No expand\"),\n",
    "    sticks + scaleXContinuous(expand = listOf(0, 2.5)) + \n",
    "        scaleYContinuous(expand = listOf(0, 2)) + \n",
    "        ggtitle(\"scale_XY_continuous(expand=...)\")\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3dc9bef7",
   "metadata": {},
   "source": [
    "## `scaleYLog10()`  \n",
    "Log-scale works fine."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "8996ddb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"23wuhc\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":2,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[1.0,10.0,100.0,1000.0,10000.0,100000.0,1000000.0,1.0E7]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[]\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[1.0,10.0,100.0,1000.0,10000.0,100000.0,1000000.0,1.0E7]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[1.0,10.0,100.0,1000.0,10000.0,100000.0,1000000.0,1.0E7]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"y\",\n",
       "\"trans\":\"log10\"\n",
       "}]\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[1.0,10.0,100.0,1000.0,10000.0,100000.0,1000000.0,1.0E7]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"y\",\n",
       "\"format\":\".1~e\",\n",
       "\"trans\":\"log10\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\"\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"flat\":true,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"23wuhc\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val d = mapOf(\n",
    "    'x' to listOf(1, 2, 3, 4, 5, 6, 7, 8),\n",
    "    'y' to listOf(1, 10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000),\n",
    ")\n",
    "val p = letsPlot(d) + geomPath(flat = true) { x='x'; y='y'}\n",
    "p\n",
    "\n",
    "gggrid(listOf(\n",
    "    p,\n",
    "    p + coordPolar(),\n",
    "    p + scaleYLog10(),\n",
    "    p + scaleYLog10(format=\".1~e\") + coordPolar(),\n",
    "), ncol = 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57de96bf",
   "metadata": {},
   "source": [
    "# Theme"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "28b82be5",
   "metadata": {},
   "outputs": [],
   "source": [
    "val p = letsPlot(labelsData) { x = \"x\"; y = \"y\"; color = \"y\" } + \n",
    "    scaleColorBrewer(palette = \"GnBu\") +\n",
    "    geomPath(size = 3)\n",
    "\n",
    "val polar_p = p + coordPolar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "abca1ba2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"hFVlnv\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":3,\n",
       "\"nrow\":3,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"minimal2\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"minimal2\"\n",
       "}\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"bw\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"bw\"\n",
       "}\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"classic\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"classic\"\n",
       "}\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"grey\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}]\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"light\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"light\"\n",
       "}\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"minimal\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"minimal\"\n",
       "}\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"none\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"none\"\n",
       "}\n",
       "},{\n",
       "\"ggtitle\":{\n",
       "\"text\":\"void\"\n",
       "},\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"classic\",\n",
       "\"axis\":{\n",
       "\"blank\":true\n",
       "},\n",
       "\"line\":{\n",
       "\"blank\":true\n",
       "}\n",
       "}\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"hFVlnv\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gggrid(listOf(\n",
    "    p,\n",
    "    polar_p + themeMinimal2() + ggtitle(\"minimal2\"),\n",
    "    polar_p + themeBW() + ggtitle(\"bw\"),\n",
    "    polar_p + themeClassic() + ggtitle(\"classic\"),\n",
    "    polar_p + themeGrey() + ggtitle(\"grey\"),\n",
    "    polar_p + themeLight() + ggtitle(\"light\"),\n",
    "    polar_p + themeMinimal() + ggtitle(\"minimal\"),\n",
    "    polar_p + themeNone() + ggtitle(\"none\"),\n",
    "    polar_p + themeVoid() + ggtitle(\"void\"),\n",
    "), ncol = 3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2638d700",
   "metadata": {},
   "source": [
    "## Axis configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "6621bf5e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"k2zWrn\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\",\n",
       "\"axis_text_y\":{\n",
       "\"color\":\"red\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_y\":5.0,\n",
       "\"axis_text_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_x\":10.0,\n",
       "\"axis_ticks_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":3.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":5.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "}\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\",\n",
       "\"axis_text_y\":{\n",
       "\"color\":\"red\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_y\":5.0,\n",
       "\"axis_text_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_x\":10.0,\n",
       "\"axis_ticks_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":3.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":5.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "}\n",
       "}\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"k2zWrn\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p_tmp = p + theme(\n",
    "    axisLineY = elementLine(color=\"red\", size=2),\n",
    "    axisLineX = elementLine(color=\"blue\", size=2),\n",
    "    axisTicksLengthY = 5,\n",
    "    axisTicksLengthX = 10,\n",
    "    axisTicksY = elementLine(size=5, color=\"red\"), \n",
    "    axisTicksX = elementLine(size=3, color=\"blue\"),\n",
    "    axisTextX = elementText(color=\"blue\"),\n",
    "    axisTextY = elementText(color=\"red\"),\n",
    ")\n",
    "\n",
    "gggrid(listOf(\n",
    "    p_tmp,\n",
    "    p_tmp + coordPolar()\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e92a5688",
   "metadata": {},
   "source": [
    "## panelInset\n",
    "The `panelInset` parameter can be used to create space between the axis and the panel content:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "33536bf1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"kdolyx\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "       (function() {\n",
       "           var plotSpec={\n",
       "\"layout\":{\n",
       "\"name\":\"grid\",\n",
       "\"ncol\":2,\n",
       "\"nrow\":1,\n",
       "\"fit\":true,\n",
       "\"align\":false\n",
       "},\n",
       "\"theme\":{\n",
       "\"name\":\"grey\"\n",
       "},\n",
       "\"figures\":[{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\",\n",
       "\"axis_text_y\":{\n",
       "\"color\":\"red\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_y\":5.0,\n",
       "\"axis_text_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_x\":10.0,\n",
       "\"axis_ticks_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":3.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":5.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"plot_background\":{\n",
       "\"fill\":\"pink\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"panel_background\":{\n",
       "\"fill\":\"grey\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"panel_inset\":10.0,\n",
       "\"panel_border\":{\n",
       "\"color\":\"green\",\n",
       "\"size\":1.0,\n",
       "\"blank\":false\n",
       "}\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "\"x\":\"x\",\n",
       "\"y\":\"y\",\n",
       "\"color\":\"y\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"polar\"\n",
       "},\n",
       "\"data\":{\n",
       "\"x\":[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0],\n",
       "\"y\":[0.0,45.0,90.0,135.0,180.0,225.0,270.0,315.0,360.0]\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"color\",\n",
       "\"scale_mapper_kind\":\"color_brewer\",\n",
       "\"palette\":\"GnBu\"\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":3.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"path\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"name\":\"grey\",\n",
       "\"axis_text_y\":{\n",
       "\"color\":\"red\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_y\":5.0,\n",
       "\"axis_text_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_length_x\":10.0,\n",
       "\"axis_ticks_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":3.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_ticks_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":5.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_x\":{\n",
       "\"color\":\"blue\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"axis_line_y\":{\n",
       "\"color\":\"red\",\n",
       "\"size\":2.0,\n",
       "\"blank\":false\n",
       "},\n",
       "\"plot_background\":{\n",
       "\"fill\":\"pink\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"panel_background\":{\n",
       "\"fill\":\"grey\",\n",
       "\"blank\":false\n",
       "},\n",
       "\"panel_inset\":10.0,\n",
       "\"panel_border\":{\n",
       "\"color\":\"green\",\n",
       "\"size\":1.0,\n",
       "\"blank\":false\n",
       "}\n",
       "}\n",
       "}],\n",
       "\"kind\":\"subplots\"\n",
       "};\n",
       "           var plotContainer = document.getElementById(\"kdolyx\");\n",
       "           window.letsPlotCall(function() {{\n",
       "               LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n",
       "           }});\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val p_themed = p_tmp + theme(\n",
    "    plotBackground = elementRect(fill=\"pink\"),\n",
    "    panelBackground = elementRect(fill=\"grey\"),\n",
    "    panelBorder = elementRect(color=\"green\", size=1),\n",
    "    panelInset = 10\n",
    ")\n",
    "\n",
    "gggrid(listOf(\n",
    "    p_themed,\n",
    "    p_themed + coordPolar()\n",
    "))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Kotlin",
   "language": "kotlin",
   "name": "kotlin"
  },
  "language_info": {
   "codemirror_mode": "text/x-kotlin",
   "file_extension": ".kt",
   "mimetype": "text/x-kotlin",
   "name": "kotlin",
   "nbconvert_exporter": "",
   "pygments_lexer": "kotlin",
   "version": "1.8.0-dev-3517"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}