30239-notes/02.perception-and-color/perception-examples.ipynb
2024-09-29 13:18:05 -05:00

463 lines
31 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "adf7aa23-daf2-4cfe-9910-2b00576b2ff7",
"metadata": {},
"outputs": [],
"source": [
"import polars as pl\n",
"import altair as alt"
]
},
{
"cell_type": "markdown",
"id": "0726aa55-4e9f-4f0f-a522-dc231c3f2c41",
"metadata": {},
"source": [
"These are examples used in class, there's no additional content here, but you can see how the examples were created."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "bb05f630-eb13-4afe-8090-dd43c2f27a47",
"metadata": {},
"outputs": [],
"source": [
"random_df = pl.DataFrame({\n",
" \"a\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20],\n",
" \"b\": [\"a\", \"b\", \"q\", \"c\", \"a\", \"c\", \"n\", \"c\", \"p\", \"b\", \"c\", \"n\", \"q\", \"r\", \"a\", \"b\", \"c\", \"b\", \"b\", \"b\"],\n",
" \"c\": [320, 310, 300, 270, 110, 100, 130, 240, 250, 370, 330, 310, 100, 70, 210, 230, 220, 150, 160, 100]\n",
"})"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "902298fe-3a6c-446e-a060-f95071acedf1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" #altair-viz-240453dc8e7b4a848b6034958cf10567.vega-embed {\n",
" width: 100%;\n",
" display: flex;\n",
" }\n",
"\n",
" #altair-viz-240453dc8e7b4a848b6034958cf10567.vega-embed details,\n",
" #altair-viz-240453dc8e7b4a848b6034958cf10567.vega-embed details summary {\n",
" position: relative;\n",
" }\n",
"</style>\n",
"<div id=\"altair-viz-240453dc8e7b4a848b6034958cf10567\"></div>\n",
"<script type=\"text/javascript\">\n",
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n",
" (function(spec, embedOpt){\n",
" let outputDiv = document.currentScript.previousElementSibling;\n",
" if (outputDiv.id !== \"altair-viz-240453dc8e7b4a848b6034958cf10567\") {\n",
" outputDiv = document.getElementById(\"altair-viz-240453dc8e7b4a848b6034958cf10567\");\n",
" }\n",
" const paths = {\n",
" \"vega\": \"https://cdn.jsdelivr.net/npm/vega@5?noext\",\n",
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm/vega-lib?noext\",\n",
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm/vega-lite@5.20.1?noext\",\n",
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm/vega-embed@6?noext\",\n",
" };\n",
"\n",
" function maybeLoadScript(lib, version) {\n",
" var key = `${lib.replace(\"-\", \"\")}_version`;\n",
" return (VEGA_DEBUG[key] == version) ?\n",
" Promise.resolve(paths[lib]) :\n",
" new Promise(function(resolve, reject) {\n",
" var s = document.createElement('script');\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" s.async = true;\n",
" s.onload = () => {\n",
" VEGA_DEBUG[key] = version;\n",
" return resolve(paths[lib]);\n",
" };\n",
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n",
" s.src = paths[lib];\n",
" });\n",
" }\n",
"\n",
" function showError(err) {\n",
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n",
" throw err;\n",
" }\n",
"\n",
" function displayChart(vegaEmbed) {\n",
" vegaEmbed(outputDiv, spec, embedOpt)\n",
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n",
" }\n",
"\n",
" if(typeof define === \"function\" && define.amd) {\n",
" requirejs.config({paths});\n",
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n",
" } else {\n",
" maybeLoadScript(\"vega\", \"5\")\n",
" .then(() => maybeLoadScript(\"vega-lite\", \"5.20.1\"))\n",
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n",
" .catch(showError)\n",
" .then(() => displayChart(vegaEmbed));\n",
" }\n",
" })({\"config\": {\"view\": {\"continuousWidth\": 300, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-11887e965dfb0864ae959048d77cb37f\"}, \"mark\": {\"type\": \"point\"}, \"encoding\": {\"color\": {\"field\": \"b\", \"legend\": null, \"type\": \"nominal\"}, \"fill\": {\"field\": \"b\", \"legend\": null, \"type\": \"nominal\"}, \"opacity\": {\"field\": \"b\", \"legend\": null, \"type\": \"nominal\"}, \"shape\": {\"field\": \"a\", \"legend\": null, \"type\": \"nominal\"}, \"size\": {\"field\": \"c\", \"legend\": null, \"type\": \"quantitative\"}, \"x\": {\"field\": \"a\", \"type\": \"quantitative\"}, \"y\": {\"field\": \"c\", \"type\": \"quantitative\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v5.20.1.json\", \"datasets\": {\"data-11887e965dfb0864ae959048d77cb37f\": [{\"a\": 1, \"b\": \"a\", \"c\": 320}, {\"a\": 2, \"b\": \"b\", \"c\": 310}, {\"a\": 3, \"b\": \"q\", \"c\": 300}, {\"a\": 4, \"b\": \"c\", \"c\": 270}, {\"a\": 5, \"b\": \"a\", \"c\": 110}, {\"a\": 6, \"b\": \"c\", \"c\": 100}, {\"a\": 7, \"b\": \"n\", \"c\": 130}, {\"a\": 8, \"b\": \"c\", \"c\": 240}, {\"a\": 9, \"b\": \"p\", \"c\": 250}, {\"a\": 10, \"b\": \"b\", \"c\": 370}, {\"a\": 11, \"b\": \"c\", \"c\": 330}, {\"a\": 12, \"b\": \"n\", \"c\": 310}, {\"a\": 13, \"b\": \"q\", \"c\": 100}, {\"a\": 14, \"b\": \"r\", \"c\": 70}, {\"a\": 15, \"b\": \"a\", \"c\": 210}, {\"a\": 16, \"b\": \"b\", \"c\": 230}, {\"a\": 17, \"b\": \"c\", \"c\": 220}, {\"a\": 18, \"b\": \"b\", \"c\": 150}, {\"a\": 19, \"b\": \"b\", \"c\": 160}, {\"a\": 20, \"b\": \"b\", \"c\": 100}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.Chart(...)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alt.Chart(random_df).mark_point().encode(\n",
" alt.X(\"a\"),\n",
" alt.Y(\"c\"),\n",
" alt.Color(\"b\", legend=None),\n",
" alt.Size(\"c\", legend=None),\n",
" alt.Shape(\"a:N\", legend=None),\n",
" alt.Fill(\"b\", legend=None),\n",
" alt.Opacity(\"b\", legend=None),\n",
") "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "87228f27-baad-4acb-80af-1ca44c21e8fe",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 19,
"id": "5515ea60-70c1-4fd7-bef9-b5451c2ea00c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" #altair-viz-3cb4232660b6443eaf01ad5947f54289.vega-embed {\n",
" width: 100%;\n",
" display: flex;\n",
" }\n",
"\n",
" #altair-viz-3cb4232660b6443eaf01ad5947f54289.vega-embed details,\n",
" #altair-viz-3cb4232660b6443eaf01ad5947f54289.vega-embed details summary {\n",
" position: relative;\n",
" }\n",
"</style>\n",
"<div id=\"altair-viz-3cb4232660b6443eaf01ad5947f54289\"></div>\n",
"<script type=\"text/javascript\">\n",
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n",
" (function(spec, embedOpt){\n",
" let outputDiv = document.currentScript.previousElementSibling;\n",
" if (outputDiv.id !== \"altair-viz-3cb4232660b6443eaf01ad5947f54289\") {\n",
" outputDiv = document.getElementById(\"altair-viz-3cb4232660b6443eaf01ad5947f54289\");\n",
" }\n",
" const paths = {\n",
" \"vega\": \"https://cdn.jsdelivr.net/npm/vega@5?noext\",\n",
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm/vega-lib?noext\",\n",
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm/vega-lite@5.20.1?noext\",\n",
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm/vega-embed@6?noext\",\n",
" };\n",
"\n",
" function maybeLoadScript(lib, version) {\n",
" var key = `${lib.replace(\"-\", \"\")}_version`;\n",
" return (VEGA_DEBUG[key] == version) ?\n",
" Promise.resolve(paths[lib]) :\n",
" new Promise(function(resolve, reject) {\n",
" var s = document.createElement('script');\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" s.async = true;\n",
" s.onload = () => {\n",
" VEGA_DEBUG[key] = version;\n",
" return resolve(paths[lib]);\n",
" };\n",
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n",
" s.src = paths[lib];\n",
" });\n",
" }\n",
"\n",
" function showError(err) {\n",
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n",
" throw err;\n",
" }\n",
"\n",
" function displayChart(vegaEmbed) {\n",
" vegaEmbed(outputDiv, spec, embedOpt)\n",
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n",
" }\n",
"\n",
" if(typeof define === \"function\" && define.amd) {\n",
" requirejs.config({paths});\n",
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n",
" } else {\n",
" maybeLoadScript(\"vega\", \"5\")\n",
" .then(() => maybeLoadScript(\"vega-lite\", \"5.20.1\"))\n",
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n",
" .catch(showError)\n",
" .then(() => displayChart(vegaEmbed));\n",
" }\n",
" })({\"config\": {\"view\": {\"continuousWidth\": 300, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-06c45c95ede5c7f29698daa415db1c71\"}, \"mark\": {\"type\": \"line\"}, \"encoding\": {\"x\": {\"field\": \"a\", \"type\": \"quantitative\"}, \"y\": {\"field\": \"c\", \"type\": \"quantitative\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v5.20.1.json\", \"datasets\": {\"data-06c45c95ede5c7f29698daa415db1c71\": [{\"a\": 1, \"b\": \"a\", \"c\": 500}, {\"a\": 2, \"b\": \"b\", \"c\": 430}, {\"a\": 3, \"b\": \"q\", \"c\": 300}, {\"a\": 4, \"b\": \"c\", \"c\": 270}, {\"a\": 5, \"b\": \"a\", \"c\": 110}, {\"a\": 6, \"b\": \"c\", \"c\": 100}, {\"a\": 7, \"b\": \"n\", \"c\": 130}, {\"a\": 8, \"b\": \"c\", \"c\": 240}, {\"a\": 9, \"b\": \"p\", \"c\": 250}, {\"a\": 10, \"b\": \"b\", \"c\": 370}, {\"a\": 11, \"b\": \"c\", \"c\": 330}, {\"a\": 12, \"b\": \"n\", \"c\": 310}, {\"a\": 13, \"b\": \"q\", \"c\": 100}, {\"a\": 14, \"b\": \"r\", \"c\": 70}, {\"a\": 15, \"b\": \"a\", \"c\": 210}, {\"a\": 16, \"b\": \"b\", \"c\": 230}, {\"a\": 17, \"b\": \"c\", \"c\": 220}, {\"a\": 18, \"b\": \"b\", \"c\": 150}, {\"a\": 19, \"b\": \"b\", \"c\": 160}, {\"a\": 20, \"b\": \"b\", \"c\": 100}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.Chart(...)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alt.Chart(random_df).mark_line().encode(\n",
" x=\"a\",\n",
" y=\"c\",\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 143,
"id": "ba3df4b2-e64e-4574-b104-068ebe8d76c2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" #altair-viz-84136455ba564453b622f5b7d324ad44.vega-embed {\n",
" width: 100%;\n",
" display: flex;\n",
" }\n",
"\n",
" #altair-viz-84136455ba564453b622f5b7d324ad44.vega-embed details,\n",
" #altair-viz-84136455ba564453b622f5b7d324ad44.vega-embed details summary {\n",
" position: relative;\n",
" }\n",
"</style>\n",
"<div id=\"altair-viz-84136455ba564453b622f5b7d324ad44\"></div>\n",
"<script type=\"text/javascript\">\n",
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n",
" (function(spec, embedOpt){\n",
" let outputDiv = document.currentScript.previousElementSibling;\n",
" if (outputDiv.id !== \"altair-viz-84136455ba564453b622f5b7d324ad44\") {\n",
" outputDiv = document.getElementById(\"altair-viz-84136455ba564453b622f5b7d324ad44\");\n",
" }\n",
" const paths = {\n",
" \"vega\": \"https://cdn.jsdelivr.net/npm/vega@5?noext\",\n",
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm/vega-lib?noext\",\n",
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm/vega-lite@5.20.1?noext\",\n",
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm/vega-embed@6?noext\",\n",
" };\n",
"\n",
" function maybeLoadScript(lib, version) {\n",
" var key = `${lib.replace(\"-\", \"\")}_version`;\n",
" return (VEGA_DEBUG[key] == version) ?\n",
" Promise.resolve(paths[lib]) :\n",
" new Promise(function(resolve, reject) {\n",
" var s = document.createElement('script');\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" s.async = true;\n",
" s.onload = () => {\n",
" VEGA_DEBUG[key] = version;\n",
" return resolve(paths[lib]);\n",
" };\n",
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n",
" s.src = paths[lib];\n",
" });\n",
" }\n",
"\n",
" function showError(err) {\n",
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n",
" throw err;\n",
" }\n",
"\n",
" function displayChart(vegaEmbed) {\n",
" vegaEmbed(outputDiv, spec, embedOpt)\n",
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n",
" }\n",
"\n",
" if(typeof define === \"function\" && define.amd) {\n",
" requirejs.config({paths});\n",
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n",
" } else {\n",
" maybeLoadScript(\"vega\", \"5\")\n",
" .then(() => maybeLoadScript(\"vega-lite\", \"5.20.1\"))\n",
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n",
" .catch(showError)\n",
" .then(() => displayChart(vegaEmbed));\n",
" }\n",
" })({\"config\": {\"view\": {\"continuousWidth\": 300, \"continuousHeight\": 300}}, \"layer\": [{\"mark\": {\"type\": \"line\"}, \"encoding\": {\"color\": {\"field\": \"category\", \"legend\": null, \"type\": \"nominal\"}, \"x\": {\"field\": \"delta-stimulus\", \"type\": \"quantitative\"}, \"y\": {\"field\": \"response\", \"type\": \"quantitative\"}}}, {\"mark\": {\"type\": \"text\", \"align\": \"left\", \"dx\": 2}, \"encoding\": {\"color\": {\"field\": \"category\", \"type\": \"nominal\"}, \"text\": {\"field\": \"category\", \"type\": \"nominal\"}, \"x\": {\"aggregate\": \"max\", \"field\": \"delta-stimulus\", \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"max\", \"field\": \"response\", \"type\": \"quantitative\"}}}], \"data\": {\"name\": \"data-e83bb7e1867358e82dcb2f51a5487998\"}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v5.20.1.json\", \"datasets\": {\"data-e83bb7e1867358e82dcb2f51a5487998\": [{\"category\": \"brightness\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"area\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"2D position\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"brightness\", \"delta-stimulus\": 0.2, \"response\": 0.5253055608807534}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.2, \"response\": 0.36278464514424597}, {\"category\": \"area\", \"delta-stimulus\": 0.2, \"response\": 0.32413131933855255}, {\"category\": \"2D position\", \"delta-stimulus\": 0.2, \"response\": 0.2}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.2, \"response\": 0.06482626386771051}, {\"category\": \"brightness\", \"delta-stimulus\": 0.4, \"response\": 0.6931448431551464}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.4, \"response\": 0.5614328170199332}, {\"category\": \"area\", \"delta-stimulus\": 0.4, \"response\": 0.526552881733695}, {\"category\": \"2D position\", \"delta-stimulus\": 0.4, \"response\": 0.4}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.4, \"response\": 0.210621152693478}, {\"category\": \"brightness\", \"delta-stimulus\": 0.6, \"response\": 0.8151931096059227}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.6, \"response\": 0.7248285441143673}, {\"category\": \"area\", \"delta-stimulus\": 0.6, \"response\": 0.6993681904144294}, {\"category\": \"2D position\", \"delta-stimulus\": 0.6, \"response\": 0.6}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.6, \"response\": 0.41962091424865766}, {\"category\": \"brightness\", \"delta-stimulus\": 0.8, \"response\": 0.9146101038546527}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.8, \"response\": 0.8688537738459388}, {\"category\": \"area\", \"delta-stimulus\": 0.8, \"response\": 0.8553876799929505}, {\"category\": \"2D position\", \"delta-stimulus\": 0.8, \"response\": 0.8}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.8, \"response\": 0.6843101439943604}, {\"category\": \"brightness\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"area\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"2D position\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"brightness\", \"delta-stimulus\": 1.25, \"response\": 1.0933620739432781}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.25, \"response\": 1.150941654512875}, {\"category\": \"area\", \"delta-stimulus\": 1.25, \"response\": 1.1690605597782766}, {\"category\": \"2D position\", \"delta-stimulus\": 1.25, \"response\": 1.25}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.25, \"response\": 1.4613256997228459}, {\"category\": \"brightness\", \"delta-stimulus\": 1.5, \"response\": 1.1760790225246736}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.5, \"response\": 1.291033445393757}, {\"category\": \"area\", \"delta-stimulus\": 1.5, \"response\": 1.328201239943334}, {\"category\": \"2D position\", \"delta-stimulus\": 1.5, \"response\": 1.5}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.5, \"response\": 1.9923018599150013}, {\"category\": \"brightness\", \"delta-stimulus\": 1.75, \"response\": 1.2508787635704217}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.75, \"response\": 1.422702093823748}, {\"category\": \"area\", \"delta-stimulus\": 1.75, \"response\": 1.4795397379753739}, {\"category\": \"2D position\", \"delta-stimulus\": 1.75, \"response\": 1.75}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.75, \"response\": 2.589194541456904}, {\"category\": \"brightness\", \"delta-stimulus\": 2.0, \"response\": 1.3195079107728942}, {\"category\": \"depth perception\", \"delta-stimulus\": 2.0, \"response\": 1.5475649935423899}, {\"category\": \"area\", \"delta-stimulus\": 2.0, \"response\": 1.624504792712471}, {\"category\": \"2D position\", \"delta-stimulus\": 2.0, \"response\": 2.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 2.0, \"response\": 3.249009585424942}, {\"category\": \"brightness\", \"delta-stimulus\": 3.0, \"response\": 1.5518455739153598}, {\"category\": \"depth perception\", \"delta-stimulus\": 3.0, \"response\": 1.9979581655837992}, {\"category\": \"area\", \"delta-stimulus\": 3.0, \"response\": 2.157669279974593}, {\"category\": \"2D position\", \"delta-stimulus\": 3.0, \"response\": 3.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 3.0, \"response\": 6.473007839923779}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.LayerChart(...)"
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stevens = {\"brightness\": 0.4, \"depth perception\": 0.63, \"area\": 0.7, \"2D position\": 1, \n",
" \"color saturation\": 1.7, \n",
" # \"electric shock\": 3.5\n",
" }\n",
"\n",
"rows = []\n",
"for x in [0,0.2,0.4,0.6, 0.8, 1.0, 1.25, 1.5, 1.75, 2, 3]:\n",
" for cat, exponent in stevens.items():\n",
" rows.append({\"category\": cat, \"delta-stimulus\": x, \"response\": x**exponent})\n",
"\n",
"stevens_df = pl.DataFrame(rows)\n",
"\n",
"alt.Chart(stevens_df).mark_line().encode(\n",
" alt.Color(\"category\", legend=None),\n",
" alt.X(\"delta-stimulus\"),\n",
" alt.Y(\"response\"),\n",
") + alt.Chart(stevens_df).mark_text(align=\"left\", dx=2).encode(\n",
" alt.Color(\"category\"),\n",
" alt.Text(\"category\"),\n",
" alt.X(\"delta-stimulus\", aggregate=\"max\"),\n",
" alt.Y(\"response\", aggregate=\"max\"),\n",
").properties()"
]
},
{
"cell_type": "code",
"execution_count": 138,
"id": "95dc101c-1dda-413a-87fb-b700fe5f43e3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" #altair-viz-bc53670734f24e488b34439eb87105b4.vega-embed {\n",
" width: 100%;\n",
" display: flex;\n",
" }\n",
"\n",
" #altair-viz-bc53670734f24e488b34439eb87105b4.vega-embed details,\n",
" #altair-viz-bc53670734f24e488b34439eb87105b4.vega-embed details summary {\n",
" position: relative;\n",
" }\n",
"</style>\n",
"<div id=\"altair-viz-bc53670734f24e488b34439eb87105b4\"></div>\n",
"<script type=\"text/javascript\">\n",
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n",
" (function(spec, embedOpt){\n",
" let outputDiv = document.currentScript.previousElementSibling;\n",
" if (outputDiv.id !== \"altair-viz-bc53670734f24e488b34439eb87105b4\") {\n",
" outputDiv = document.getElementById(\"altair-viz-bc53670734f24e488b34439eb87105b4\");\n",
" }\n",
" const paths = {\n",
" \"vega\": \"https://cdn.jsdelivr.net/npm/vega@5?noext\",\n",
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm/vega-lib?noext\",\n",
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm/vega-lite@5.20.1?noext\",\n",
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm/vega-embed@6?noext\",\n",
" };\n",
"\n",
" function maybeLoadScript(lib, version) {\n",
" var key = `${lib.replace(\"-\", \"\")}_version`;\n",
" return (VEGA_DEBUG[key] == version) ?\n",
" Promise.resolve(paths[lib]) :\n",
" new Promise(function(resolve, reject) {\n",
" var s = document.createElement('script');\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" s.async = true;\n",
" s.onload = () => {\n",
" VEGA_DEBUG[key] = version;\n",
" return resolve(paths[lib]);\n",
" };\n",
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n",
" s.src = paths[lib];\n",
" });\n",
" }\n",
"\n",
" function showError(err) {\n",
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n",
" throw err;\n",
" }\n",
"\n",
" function displayChart(vegaEmbed) {\n",
" vegaEmbed(outputDiv, spec, embedOpt)\n",
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n",
" }\n",
"\n",
" if(typeof define === \"function\" && define.amd) {\n",
" requirejs.config({paths});\n",
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n",
" } else {\n",
" maybeLoadScript(\"vega\", \"5\")\n",
" .then(() => maybeLoadScript(\"vega-lite\", \"5.20.1\"))\n",
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n",
" .catch(showError)\n",
" .then(() => displayChart(vegaEmbed));\n",
" }\n",
" })({\"config\": {\"view\": {\"continuousWidth\": 300, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-0e90517b784600bf101c0511aa54d2f3\"}, \"mark\": {\"type\": \"text\", \"align\": \"left\", \"dx\": 0}, \"encoding\": {\"color\": {\"field\": \"category\", \"type\": \"nominal\"}, \"text\": {\"field\": \"category\", \"type\": \"nominal\"}, \"x\": {\"aggregate\": \"max\", \"field\": \"delta-stimulus\", \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"max\", \"field\": \"response\", \"type\": \"quantitative\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v5.20.1.json\", \"datasets\": {\"data-0e90517b784600bf101c0511aa54d2f3\": [{\"category\": \"brightness\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"area\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"2D position\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.0, \"response\": 0.0}, {\"category\": \"brightness\", \"delta-stimulus\": 0.2, \"response\": 0.5253055608807534}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.2, \"response\": 0.34016536861678487}, {\"category\": \"area\", \"delta-stimulus\": 0.2, \"response\": 0.32413131933855255}, {\"category\": \"2D position\", \"delta-stimulus\": 0.2, \"response\": 0.2}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.2, \"response\": 0.06482626386771051}, {\"category\": \"brightness\", \"delta-stimulus\": 0.4, \"response\": 0.6931448431551464}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.4, \"response\": 0.5412279224891856}, {\"category\": \"area\", \"delta-stimulus\": 0.4, \"response\": 0.526552881733695}, {\"category\": \"2D position\", \"delta-stimulus\": 0.4, \"response\": 0.4}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.4, \"response\": 0.210621152693478}, {\"category\": \"brightness\", \"delta-stimulus\": 0.6, \"response\": 0.8151931096059227}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.6, \"response\": 0.7101683900920394}, {\"category\": \"area\", \"delta-stimulus\": 0.6, \"response\": 0.6993681904144294}, {\"category\": \"2D position\", \"delta-stimulus\": 0.6, \"response\": 0.6}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.6, \"response\": 0.41962091424865766}, {\"category\": \"brightness\", \"delta-stimulus\": 0.8, \"response\": 0.9146101038546527}, {\"category\": \"depth perception\", \"delta-stimulus\": 0.8, \"response\": 0.8611331167340528}, {\"category\": \"area\", \"delta-stimulus\": 0.8, \"response\": 0.8553876799929505}, {\"category\": \"2D position\", \"delta-stimulus\": 0.8, \"response\": 0.8}, {\"category\": \"color saturation\", \"delta-stimulus\": 0.8, \"response\": 0.6843101439943604}, {\"category\": \"brightness\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"area\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"2D position\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.0, \"response\": 1.0}, {\"category\": \"brightness\", \"delta-stimulus\": 1.25, \"response\": 1.0933620739432781}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.25, \"response\": 1.1612606466612456}, {\"category\": \"area\", \"delta-stimulus\": 1.25, \"response\": 1.1690605597782766}, {\"category\": \"2D position\", \"delta-stimulus\": 1.25, \"response\": 1.25}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.25, \"response\": 1.4613256997228459}, {\"category\": \"brightness\", \"delta-stimulus\": 1.5, \"response\": 1.1760790225246736}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.5, \"response\": 1.312142926451156}, {\"category\": \"area\", \"delta-stimulus\": 1.5, \"response\": 1.328201239943334}, {\"category\": \"2D position\", \"delta-stimulus\": 1.5, \"response\": 1.5}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.5, \"response\": 1.9923018599150013}, {\"category\": \"brightness\", \"delta-stimulus\": 1.75, \"response\": 1.2508787635704217}, {\"category\": \"depth perception\", \"delta-stimulus\": 1.75, \"response\": 1.4549078683787613}, {\"category\": \"area\", \"delta-stimulus\": 1.75, \"response\": 1.4795397379753739}, {\"category\": \"2D position\", \"delta-stimulus\": 1.75, \"response\": 1.75}, {\"category\": \"color saturation\", \"delta-stimulus\": 1.75, \"response\": 2.589194541456904}, {\"category\": \"brightness\", \"delta-stimulus\": 2.0, \"response\": 1.3195079107728942}, {\"category\": \"depth perception\", \"delta-stimulus\": 2.0, \"response\": 1.5910729675098374}, {\"category\": \"area\", \"delta-stimulus\": 2.0, \"response\": 1.624504792712471}, {\"category\": \"2D position\", \"delta-stimulus\": 2.0, \"response\": 2.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 2.0, \"response\": 3.249009585424942}, {\"category\": \"brightness\", \"delta-stimulus\": 3.0, \"response\": 1.5518455739153598}, {\"category\": \"depth perception\", \"delta-stimulus\": 3.0, \"response\": 2.087715139785683}, {\"category\": \"area\", \"delta-stimulus\": 3.0, \"response\": 2.157669279974593}, {\"category\": \"2D position\", \"delta-stimulus\": 3.0, \"response\": 3.0}, {\"category\": \"color saturation\", \"delta-stimulus\": 3.0, \"response\": 6.473007839923779}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.Chart(...)"
]
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9ad736e1-0e19-46d1-8e93-2b1409ffffc1",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.15"
}
},
"nbformat": 4,
"nbformat_minor": 5
}