{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bbba8dfc-38a5-4bb0-be7c-011843f0ae95",
   "metadata": {},
   "source": [
    "# Configuring Nudge Units in Position Adjustments\n",
    "\n",
    "The position adjustment `positionNudge()` now supports the `unit` parameter that specifies the measurement system for nudge offsets.  <br/>\n",
    "Equivalent parameter is also available as `nudgeUnit` in `geomText()` and `geomLabel()` directly. \n",
    "\n",
    "Available Units:\n",
    "\n",
    "- `\"identity\"` (default): nudge in data coordinates - a value of 1 corresponds to the distance from 0 to 1 on the axis\n",
    "- `\"size\"`: nudge relative to point size - a value of 1 corresponds to the diameter of a point with size 1\n",
    "- `\"px\"`: nudge in fixed pixels - a value of 1 corresponds to 1 pixel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9b462fcf-68da-4abd-aacf-595979a62133",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-12-03T15:57:44.381719Z",
     "iopub.status.busy": "2025-12-03T15:57:44.379018Z",
     "iopub.status.idle": "2025-12-03T15:57:46.331460Z",
     "shell.execute_reply": "2025-12-03T15:57:46.331178Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"tp5XA9\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n",
       "       if(!window.letsPlotCallQueue) {\n",
       "           window.letsPlotCallQueue = [];\n",
       "       }; \n",
       "       window.letsPlotCall = function(f) {\n",
       "           window.letsPlotCallQueue.push(f);\n",
       "       };\n",
       "       (function() {\n",
       "           var script = document.createElement(\"script\");\n",
       "           script.type = \"text/javascript\";\n",
       "           script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.8.1/js-package/distr/lets-plot.min.js\";\n",
       "           script.onload = function() {\n",
       "               window.letsPlotCall = function(f) {f();};\n",
       "               window.letsPlotCallQueue.forEach(function(f) {f();});\n",
       "               window.letsPlotCallQueue = [];\n",
       "               \n",
       "               \n",
       "           };\n",
       "           script.onerror = function(event) {\n",
       "               window.letsPlotCall = function(f) {};\n",
       "               window.letsPlotCallQueue = [];\n",
       "               var div = document.createElement(\"div\");\n",
       "               div.style.color = 'darkred';\n",
       "               div.textContent = 'Error loading Lets-Plot JS';\n",
       "               document.getElementById(\"tp5XA9\").appendChild(div);\n",
       "           };\n",
       "           var e = document.getElementById(\"tp5XA9\");\n",
       "           e.appendChild(script);\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "            <div id=\"kotlin_out_0\"></div>\n",
       "            <script type=\"text/javascript\">\n",
       "                            if(!window.kotlinQueues) {\n",
       "                window.kotlinQueues = {};\n",
       "            }\n",
       "            if(!window.kotlinQueues[\"letsPlotJs\"]) {\n",
       "                var resQueue = [];\n",
       "                window.kotlinQueues[\"letsPlotJs\"] = resQueue;\n",
       "                window[\"call_letsPlotJs\"] = function(f) {\n",
       "                    resQueue.push(f);\n",
       "                }\n",
       "            }\n",
       "            (function (){\n",
       "                var modifiers = [(function(script) {\n",
       "    script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.8.1/js-package/distr/lets-plot.min.js\"\n",
       "    script.type = \"text/javascript\";\n",
       "})];\n",
       "                var e = document.getElementById(\"kotlin_out_0\");\n",
       "                modifiers.forEach(function (gen) {\n",
       "                    var script = document.createElement(\"script\");\n",
       "                    gen(script)\n",
       "                    script.addEventListener(\"load\", function() {\n",
       "                        window[\"call_letsPlotJs\"] = function(f) {f();};\n",
       "                        window.kotlinQueues[\"letsPlotJs\"].forEach(function(f) {f();});\n",
       "                        window.kotlinQueues[\"letsPlotJs\"] = [];\n",
       "                    }, false);\n",
       "                    script.addEventListener(\"error\", function() {\n",
       "                        window[\"call_letsPlotJs\"] = function(f) {};\n",
       "                        window.kotlinQueues[\"letsPlotJs\"] = [];\n",
       "                        var div = document.createElement(\"div\");\n",
       "                        div.style.color = 'darkred';\n",
       "                        div.textContent = 'Error loading resource letsPlotJs';\n",
       "                        document.getElementById(\"kotlin_out_0\").appendChild(div);\n",
       "                    }, false);\n",
       "                    \n",
       "                    e.appendChild(script);\n",
       "                });\n",
       "            })();\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%useLatestDescriptors\n",
    "%use lets-plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ecabca69-383a-46d8-afb0-01d42d0a408e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-12-03T15:57:46.334189Z",
     "iopub.status.busy": "2025-12-03T15:57:46.333704Z",
     "iopub.status.idle": "2025-12-03T15:57:46.368578Z",
     "shell.execute_reply": "2025-12-03T15:57:46.367997Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Lets-Plot Kotlin API v.4.12.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.8.1.\n",
       "Outputs: Web (HTML+JS), Kotlin Notebook (Swing), Static SVG (hidden)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "LetsPlot.getInfo()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ceb8835-e571-4aac-94c6-310f2011a5a8",
   "metadata": {},
   "source": [
    "#### 1. Without nudge"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ea4c9641-75e2-463d-bd12-560d3bb96af8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-12-03T15:57:46.370950Z",
     "iopub.status.busy": "2025-12-03T15:57:46.370497Z",
     "iopub.status.idle": "2025-12-03T15:57:46.610022Z",
     "shell.execute_reply": "2025-12-03T15:57:46.610143Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"EzSEvK\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n",
       "       if(!window.letsPlotCallQueue) {\n",
       "           window.letsPlotCallQueue = [];\n",
       "       }; \n",
       "       window.letsPlotCall = function(f) {\n",
       "           window.letsPlotCallQueue.push(f);\n",
       "       };\n",
       "       (function() {\n",
       "           var script = document.createElement(\"script\");\n",
       "           script.type = \"text/javascript\";\n",
       "           script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.8.1/js-package/distr/lets-plot.min.js\";\n",
       "           script.onload = function() {\n",
       "               window.letsPlotCall = function(f) {f();};\n",
       "               window.letsPlotCallQueue.forEach(function(f) {f();});\n",
       "               window.letsPlotCallQueue = [];\n",
       "               \n",
       "               \n",
       "           };\n",
       "           script.onerror = function(event) {\n",
       "               window.letsPlotCall = function(f) {};\n",
       "               window.letsPlotCallQueue = [];\n",
       "               var div = document.createElement(\"div\");\n",
       "               div.style.color = 'darkred';\n",
       "               div.textContent = 'Error loading Lets-Plot JS';\n",
       "               document.getElementById(\"EzSEvK\").appendChild(div);\n",
       "           };\n",
       "           var e = document.getElementById(\"EzSEvK\");\n",
       "           e.appendChild(script);\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "ggsize": {
         "height": 300.0,
         "width": 400.0
        },
        "kind": "plot",
        "layers": [
         {
          "color": "#DA8459",
          "geom": "point",
          "mapping": {},
          "position": "identity",
          "size": 10.0,
          "stat": "identity",
          "x": 0.0,
          "y": 0.0
         },
         {
          "geom": "text",
          "label": "text without nudge",
          "mapping": {},
          "position": "identity",
          "stat": "identity",
          "x": 0.0,
          "y": 0.0
         }
        ],
        "mapping": {},
        "scales": []
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"IylURS\" ></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"IylURS\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "},\n",
       "\"ggsize\":{\n",
       "\"width\":400.0,\n",
       "\"height\":300.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#DA8459\",\n",
       "\"size\":10.0,\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"label\":\"text without nudge\",\n",
       "\"geom\":\"text\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"spec_id\":\"1\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=366a6fe1-b47d-46f3-ba63-69cb4d5c06e4 width=\"100%\" height=\"100%\" style=\"max-width: 400.0px; max-height: 300.0px;\" viewBox=\"0 0 400.0 300.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pZhdHZz .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "\n",
       "}\n",
       "#pZhdHZz .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#doXqAJk .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#doXqAJk .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pZhdHZz .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#doXqAJk .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#doXqAJk .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#doXqAJk .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pZhdHZz\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 300.0 L400.0 300.0 L400.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(21.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"34.19846933242502\" y1=\"0.0\" x2=\"34.19846933242502\" y2=\"254.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"102.5954079972751\" y1=\"0.0\" x2=\"102.5954079972751\" y2=\"254.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"170.9923466621252\" y1=\"0.0\" x2=\"170.9923466621252\" y2=\"254.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"239.38928532697525\" y1=\"0.0\" x2=\"239.38928532697525\" y2=\"254.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"307.78622399182535\" y1=\"0.0\" x2=\"307.78622399182535\" y2=\"254.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"228.60000000000002\" x2=\"341.9846933242504\" y2=\"228.60000000000002\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"177.8\" x2=\"341.9846933242504\" y2=\"177.8\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"127.0\" x2=\"341.9846933242504\" y2=\"127.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"76.19999999999999\" x2=\"341.9846933242504\" y2=\"76.19999999999999\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"25.39999999999999\" x2=\"341.9846933242504\" y2=\"25.39999999999999\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#c7SHsha)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (341.9846933242504, 254.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#da8459\" stroke=\"#da8459\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"170.9923466621252\" cy=\"127.0\" r=\"11.0\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 170.9923466621252 127.0 ) \">\n",
       "                <g transform=\"translate(170.9923466621252 131.2 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>text without nudge</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cHYV0Pj\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"341.9846933242504\" height=\"254.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"c7SHsha\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"341.9846933242504\" height=\"254.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 254.0 ) \">\n",
       "          <g transform=\"translate(34.19846933242502 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>-0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(102.5954079972751 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(170.9923466621252 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(239.38928532697525 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(307.78622399182535 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"341.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 228.60000000000002 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>-0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 177.8 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 127.0 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 76.19999999999999 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 25.39999999999999 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <g transform=\"translate(15.0 133.0 ) rotate(-90.0 ) \">\n",
       "      <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-y\" text-anchor=\"middle\">\n",
       "        <tspan>y</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <g transform=\"translate(223.00765333787479 294.0 ) \">\n",
       "      <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-x\" text-anchor=\"middle\">\n",
       "        <tspan>x</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 300.0 L400.0 300.0 L400.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"doXqAJk\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"366a6fe1-b47d-46f3-ba63-69cb4d5c06e4\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "letsPlot() + \n",
    "    geomPoint(x = 0, y = 0, size = 10, color = \"#DA8459\") + \n",
    "    geomText(x = 0, y = 0, label = \"text without nudge\") + \n",
    "    ggsize(400, 300)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e8597bb-2986-429c-bab3-26a58f89bddf",
   "metadata": {},
   "source": [
    "#### 2. Unit Comparison: Pixel, Size, and Identity\n",
    "\n",
    "The `\"size\"` unit enables precise positioning relative to point dimensions.\n",
    "\n",
    "In this example, the point has `size = 30` and text is positioned at half that distance (`nudgeY = 15`). When combined with `vjust`/`hjust`, this allows for placing text at specific locations relative to the point boundary."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8acd87f8-94f4-4d5a-81a6-a2e5a0e8a71f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-12-03T15:57:46.612528Z",
     "iopub.status.busy": "2025-12-03T15:57:46.612040Z",
     "iopub.status.idle": "2025-12-03T15:57:46.729554Z",
     "shell.execute_reply": "2025-12-03T15:57:46.729374Z"
    }
   },
   "outputs": [
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "kind": "plot",
        "layers": [
         {
          "color": "#B9534C",
          "geom": "point",
          "mapping": {},
          "position": "identity",
          "size": 5.0,
          "stat": "identity",
          "x": 0.0,
          "y": 1.0
         },
         {
          "geom": "text",
          "label": "identity 0.2",
          "mapping": {},
          "nudge_y": 0.2,
          "position": "identity",
          "stat": "identity",
          "x": 0.0,
          "y": 1.0
         },
         {
          "color": "#DA8459",
          "geom": "point",
          "mapping": {},
          "position": "identity",
          "size": 5.0,
          "stat": "identity",
          "x": 1.0,
          "y": 1.0
         },
         {
          "geom": "text",
          "label": "px 40",
          "mapping": {},
          "nudge_unit": "px",
          "nudge_y": 40.0,
          "position": "identity",
          "stat": "identity",
          "x": 1.0,
          "y": 1.0
         },
         {
          "color": "#EEAB65",
          "geom": "point",
          "mapping": {},
          "position": "identity",
          "size": 30.0,
          "stat": "identity",
          "x": 2.0,
          "y": 1.0
         },
         {
          "geom": "text",
          "label": "size 15",
          "mapping": {},
          "nudge_unit": "size",
          "nudge_y": 15.0,
          "position": "identity",
          "stat": "identity",
          "x": 2.0,
          "y": 1.0
         },
         {
          "color": "#F6C971",
          "geom": "point",
          "mapping": {},
          "position": "identity",
          "size": 30.0,
          "stat": "identity",
          "x": 3.0,
          "y": 1.0
         },
         {
          "geom": "text",
          "label": "size 15 vjust 0",
          "mapping": {},
          "nudge_unit": "size",
          "nudge_y": 15.0,
          "position": "identity",
          "stat": "identity",
          "vjust": 0.0,
          "x": 3.0,
          "y": 1.0
         },
         {
          "geom": "text",
          "label": "size -15 vjust 1",
          "mapping": {},
          "nudge_unit": "size",
          "nudge_y": -15.0,
          "position": "identity",
          "stat": "identity",
          "vjust": 1.0,
          "x": 3.0,
          "y": 1.0
         }
        ],
        "mapping": {},
        "scales": [
         {
          "aesthetic": "x",
          "limits": [
           -1.0,
           4.0
          ]
         }
        ]
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"U8CzKf\" ></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"U8CzKf\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[{\n",
       "\"aesthetic\":\"x\",\n",
       "\"limits\":[-1.0,4.0]\n",
       "}],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#B9534C\",\n",
       "\"size\":5.0,\n",
       "\"x\":0.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"nudge_y\":0.2,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"x\":0.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"label\":\"identity 0.2\",\n",
       "\"geom\":\"text\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#DA8459\",\n",
       "\"size\":5.0,\n",
       "\"x\":1.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"nudge_y\":40.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"x\":1.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"label\":\"px 40\",\n",
       "\"geom\":\"text\",\n",
       "\"nudge_unit\":\"px\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#EEAB65\",\n",
       "\"size\":30.0,\n",
       "\"x\":2.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"nudge_y\":15.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"x\":2.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"label\":\"size 15\",\n",
       "\"geom\":\"text\",\n",
       "\"nudge_unit\":\"size\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#F6C971\",\n",
       "\"size\":30.0,\n",
       "\"x\":3.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"nudge_y\":15.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"vjust\":0.0,\n",
       "\"x\":3.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"label\":\"size 15 vjust 0\",\n",
       "\"geom\":\"text\",\n",
       "\"nudge_unit\":\"size\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"nudge_y\":-15.0,\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"vjust\":1.0,\n",
       "\"x\":3.0,\n",
       "\"y\":1.0,\n",
       "\"position\":\"identity\",\n",
       "\"label\":\"size -15 vjust 1\",\n",
       "\"geom\":\"text\",\n",
       "\"nudge_unit\":\"size\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"spec_id\":\"3\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=48bf1709-9072-46ac-97b8-9e51fe87dc47 width=\"100%\" height=\"100%\" style=\"max-width: 600.0px; max-height: 400.0px;\" viewBox=\"0 0 600.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pUgYMix .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "\n",
       "}\n",
       "#pUgYMix .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#da0KKmT .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#da0KKmT .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pUgYMix .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#da0KKmT .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#da0KKmT .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#da0KKmT .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pUgYMix\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(21.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"24.9984226718054\" y1=\"0.0\" x2=\"24.9984226718054\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"124.99211335902697\" y1=\"0.0\" x2=\"124.99211335902697\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"224.98580404624855\" y1=\"0.0\" x2=\"224.98580404624855\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"324.9794947334701\" y1=\"0.0\" x2=\"324.9794947334701\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"424.97318542069166\" y1=\"0.0\" x2=\"424.97318542069166\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"524.9668761079133\" y1=\"0.0\" x2=\"524.9668761079133\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"318.59999999999997\" x2=\"549.9652987797186\" y2=\"318.59999999999997\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"247.8\" x2=\"549.9652987797186\" y2=\"247.8\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"177.0\" x2=\"549.9652987797186\" y2=\"177.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"106.19999999999999\" x2=\"549.9652987797186\" y2=\"106.19999999999999\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"35.400000000000034\" x2=\"549.9652987797186\" y2=\"35.400000000000034\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#cPZQAlP)\" clip-bounds-jfx=\"[rect (23.034701220281416, 0.0), (549.9652987797186, 354.0)]\">\n",
       "        <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#b9534c\" stroke=\"#b9534c\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"124.99211335902697\" cy=\"177.0\" r=\"5.5\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 124.99211335902697 106.19999999999999 ) \">\n",
       "                <g transform=\"translate(124.99211335902697 110.39999999999999 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>identity 0.2</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#da8459\" stroke=\"#da8459\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"224.98580404624855\" cy=\"177.0\" r=\"5.5\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 224.98580404624855 137.0 ) \">\n",
       "                <g transform=\"translate(224.98580404624855 141.2 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>px 40</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#eeab65\" stroke=\"#eeab65\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"324.9794947334701\" cy=\"177.0\" r=\"33.0\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 324.9794947334701 144.0 ) \">\n",
       "                <g transform=\"translate(324.9794947334701 148.2 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>size 15</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#f6c971\" stroke=\"#f6c971\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"424.97318542069166\" cy=\"177.0\" r=\"33.0\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 424.97318542069166 144.0 ) \">\n",
       "                <g transform=\"translate(424.97318542069166 144.0 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>size 15 vjust 0</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 424.97318542069166 210.0 ) \">\n",
       "                <g transform=\"translate(424.97318542069166 219.8 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>size -15 vjust 1</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cEp5rwk\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cqLVMI5\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cw57KzG\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cXc3FCX\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cXaDgb4\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cPh37GF\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"c1GsjLJ\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cPi7TmE\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cPZQAlP\">\n",
       "            <rect x=\"23.034701220281416\" y=\"0.0\" width=\"549.9652987797186\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(23.034701220281416 354.0 ) \">\n",
       "          <g transform=\"translate(24.9984226718054 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>-1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(124.99211335902697 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(224.98580404624855 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(324.9794947334701 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(424.97318542069166 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(524.9668761079133 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"549.9652987797186\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(23.034701220281416 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 318.59999999999997 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0.6</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 247.8 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0.8</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 177.0 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 106.19999999999999 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>1.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 35.400000000000034 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>1.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <g transform=\"translate(15.0 183.0 ) rotate(-90.0 ) \">\n",
       "      <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-y\" text-anchor=\"middle\">\n",
       "        <tspan>y</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <g transform=\"translate(319.01735061014074 394.0 ) \">\n",
       "      <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-x\" text-anchor=\"middle\">\n",
       "        <tspan>x</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"da0KKmT\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"48bf1709-9072-46ac-97b8-9e51fe87dc47\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "letsPlot() +\n",
    "    xlim(-1 to 4) +\n",
    "    geomPoint(x = 0, y = 1, size = 5, color = \"#B9534C\") +\n",
    "    geomText(x = 0, y = 1, label = \"identity 0.2\", nudgeY = 0.2) +\n",
    "    geomPoint(x = 1, y = 1, size = 5, color = \"#DA8459\") +\n",
    "    geomText(x = 1, y = 1, label = \"px 40\", nudgeY = 40, nudgeUnit = \"px\") +\n",
    "    geomPoint(x = 2, y = 1, size = 30, color = \"#EEAB65\") +\n",
    "    geomText(x = 2, y = 1, label = \"size 15\", nudgeY = 15, nudgeUnit = \"size\") +\n",
    "    geomPoint(x = 3, y = 1, size = 30, color = \"#F6C971\") +\n",
    "    geomText(x = 3, y = 1, label = \"size 15 vjust 0\", nudgeY = 15, vjust = 0, nudgeUnit = \"size\") +\n",
    "    geomText(x = 3, y = 1, label = \"size -15 vjust 1\", nudgeY = -15, vjust = 1, nudgeUnit = \"size\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8f317a8-5aec-4ba7-8646-cbad83c13742",
   "metadata": {},
   "source": [
    "#### 3. Parameter `unit` in `positionNudge()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "7abb1d30-0e36-409a-bad4-acd11b86c9b7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-12-03T15:57:46.731770Z",
     "iopub.status.busy": "2025-12-03T15:57:46.731302Z",
     "iopub.status.idle": "2025-12-03T15:57:46.792879Z",
     "shell.execute_reply": "2025-12-03T15:57:46.793000Z"
    }
   },
   "outputs": [
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "kind": "plot",
        "layers": [
         {
          "color": "#DA8459",
          "geom": "point",
          "mapping": {},
          "position": "identity",
          "size": 50.0,
          "stat": "identity",
          "x": 0.0,
          "y": 0.0
         },
         {
          "color": "blue",
          "geom": "point",
          "mapping": {},
          "position": {
           "name": "nudge",
           "unit": "size",
           "x": 0.0,
           "y": 25.0
          },
          "size": 20.0,
          "stat": "identity",
          "x": 0.0,
          "y": 0.0
         },
         {
          "geom": "text",
          "label": "positionNudge size 25",
          "mapping": {},
          "position": {
           "name": "nudge",
           "unit": "size",
           "x": 50.0,
           "y": 25.0
          },
          "stat": "identity",
          "x": 0.0,
          "y": 0.0
         }
        ],
        "mapping": {},
        "scales": []
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"fWc5Qm\" ></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"fWc5Qm\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#DA8459\",\n",
       "\"size\":50.0,\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"blue\",\n",
       "\"size\":20.0,\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"position\":{\n",
       "\"name\":\"nudge\",\n",
       "\"x\":0.0,\n",
       "\"y\":25.0,\n",
       "\"unit\":\"size\"\n",
       "},\n",
       "\"geom\":\"point\",\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"x\":0.0,\n",
       "\"y\":0.0,\n",
       "\"position\":{\n",
       "\"name\":\"nudge\",\n",
       "\"x\":50.0,\n",
       "\"y\":25.0,\n",
       "\"unit\":\"size\"\n",
       "},\n",
       "\"label\":\"positionNudge size 25\",\n",
       "\"geom\":\"text\",\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"spec_id\":\"5\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=a9eba307-2b3d-4144-8c06-2e2b2c02cabd width=\"100%\" height=\"100%\" style=\"max-width: 600.0px; max-height: 400.0px;\" viewBox=\"0 0 600.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pyJjXFh .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "\n",
       "}\n",
       "#pyJjXFh .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d2AHlab .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d2AHlab .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pyJjXFh .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d2AHlab .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d2AHlab .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d2AHlab .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "font-style: normal;\n",
       "font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pyJjXFh\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(21.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"54.19846933242502\" y1=\"0.0\" x2=\"54.19846933242502\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"162.59540799727512\" y1=\"0.0\" x2=\"162.59540799727512\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"270.9923466621252\" y1=\"0.0\" x2=\"270.9923466621252\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"379.3892853269753\" y1=\"0.0\" x2=\"379.3892853269753\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"487.7862239918254\" y1=\"0.0\" x2=\"487.7862239918254\" y2=\"354.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"318.6\" x2=\"541.9846933242504\" y2=\"318.6\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"247.8\" x2=\"541.9846933242504\" y2=\"247.8\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"177.0\" x2=\"541.9846933242504\" y2=\"177.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"106.2\" x2=\"541.9846933242504\" y2=\"106.2\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"35.400000000000006\" x2=\"541.9846933242504\" y2=\"35.400000000000006\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#ckLAbdq)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (541.9846933242504, 354.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#da8459\" stroke=\"#da8459\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"270.9923466621252\" cy=\"177.0\" r=\"55.00000000000001\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <g >\n",
       "                  <circle fill=\"#0000ff\" stroke=\"#0000ff\" stroke-opacity=\"0.0\" stroke-width=\"0.0\" cx=\"270.9923466621252\" cy=\"122.0\" r=\"22.0\" />\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g transform=\"rotate(0.0 380.9923466621252 122.0 ) \">\n",
       "                <g transform=\"translate(380.9923466621252 126.2 ) \">\n",
       "                  <text style=\"fill:#474747;font-size:14.0px;font-family:sans-serif;\" y=\"0.0\" fill-opacity=\"1.0\" text-anchor=\"middle\">\n",
       "                    <tspan>positionNudge size 25</tspan>\n",
       "                  </text>\n",
       "                </g>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"c6JYXg7\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"541.9846933242504\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cnbPgSB\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"541.9846933242504\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"ckLAbdq\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"541.9846933242504\" height=\"354.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 354.0 ) \">\n",
       "          <g transform=\"translate(54.19846933242502 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>-0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(162.59540799727512 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(270.9923466621252 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(379.3892853269753 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(487.7862239918254 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\">\n",
       "                <tspan>0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"541.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 318.6 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>-0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 247.8 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 177.0 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 106.2 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 35.400000000000006 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text style=\"font-size:13.0px;\" y=\"0.0\" class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\">\n",
       "                <tspan>0.4</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <g transform=\"translate(15.0 183.0 ) rotate(-90.0 ) \">\n",
       "      <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-y\" text-anchor=\"middle\">\n",
       "        <tspan>y</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <g transform=\"translate(323.00765333787484 394.0 ) \">\n",
       "      <text style=\"font-size:15.0px;\" y=\"0.0\" class=\"axis-title-x\" text-anchor=\"middle\">\n",
       "        <tspan>x</tspan>\n",
       "      </text>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L600.0 400.0 L600.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"d2AHlab\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"a9eba307-2b3d-4144-8c06-2e2b2c02cabd\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "letsPlot() + \n",
    "    geomPoint(x = 0, y = 0, size = 50, color = \"#DA8459\") + \n",
    "    geomPoint(x = 0, y = 0, size = 20, color = \"blue\", position = positionNudge(0, 25, \"size\")) + \n",
    "    geomText(x = 0, y = 0, label = \"positionNudge size 25\", position = positionNudge(50, 25, \"size\"))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Kotlin",
   "language": "kotlin",
   "name": "kotlin"
  },
  "language_info": {
   "codemirror_mode": "text/x-kotlin",
   "file_extension": ".kt",
   "mimetype": "text/x-kotlin",
   "name": "kotlin",
   "nbconvert_exporter": "",
   "pygments_lexer": "kotlin",
   "version": "2.2.20-Beta2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
