diff --git a/02.perception-and-color/slides.html b/02.perception-and-color/slides.html index e4d26fd..9552539 100644 --- a/02.perception-and-color/slides.html +++ b/02.perception-and-color/slides.html @@ -13,11 +13,11 @@ /* custom-theme.css */ /* @theme custom-theme */div#\:\$p>svg>foreignObject>section .container{display:flex}div#\:\$p>svg>foreignObject>section .col{flex:1} -/* @theme xkoyq3ed5gr51lfqq53znqi6k5fifnpsg9oj2opofq */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+/* @theme 670k962qcywdqlkxlx8i56h39klbro6ifqxw0a72h9p */div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure>figcaption{position:absolute;border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;white-space:nowrap;width:1px}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=content],div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#\:\$p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#\:\$p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

Perception & Color

CAPP 30239

-
+

Today

  • What matters most when creating a visualization?
  • @@ -25,10 +25,10 @@
  • Understanding color, and computational representations of it.
-
+

What is the most important question when creating a visualization?

-
+

What is the most important question when creating a visualization?

  • Where will the data come from? @@ -36,7 +36,7 @@
  • Who is the audience?
-
+

Audience First

  • Who are you presenting to?
  • @@ -47,7 +47,7 @@

Only now can we start thinking about data and presentation.

-
+

Perception

  • Selective - We can only pay attention to so much.
  • @@ -55,7 +55,7 @@
  • Limited working memory - We hold a very limited set of information in our minds at once.
-
+

What do you see?

@@ -74,7 +74,7 @@
-
+

What do you see?

@@ -87,11 +87,11 @@
-
+

Effectiveness Revisited

-
+

Altair Channels

@@ -117,7 +117,7 @@
-
+

Derived Properties

  • Length/Area - size of bars (X, Y)
  • @@ -127,14 +127,14 @@

What about volume?

-
+

Stevens' Power Law

Stevens (1975): Human response to sensory stimulus is characterized by a power law with different exponents with different stimuli.

perception = (magnitude of sensation)a

Smaller a exponent: harder to perceive changes.

Stevens measured values of a by exposing people to varied stimulus and asking them to compare magnitudes.

-
+

@@ -186,17 +186,17 @@
-
+

3D Graphs

-
+

-
+

-
+

Instead of 3D Graphs

  • Find other channels: hue & size are good candidates.
  • @@ -204,13 +204,13 @@

TODO: example of 2D decomposition of a graph

-
+

What is Color?

Wavelengths of light are perceived as particular colors:

In practice: we almost never see monochromatic color, light sources emit a spectrum & we perceive peaks.

-
+

Color & the Eye

Rods

    @@ -225,14 +225,14 @@
  • less sensitive in low light conditions
-
+

Metamers ...

TODO: slides from Alex maybe? or drop?

-
+

Color Naming

-
+

Color Models

  • CIE
  • @@ -240,12 +240,12 @@
  • HS(V|L|B)
-
+

Color Channels & Data Types

TODO: https://docs.google.com/presentation/d/1avOsobdcsTG6qaDVCSesIOBFcfxjH12d/edit#slide=id.p27
TODO: (also 33 and 34)

-
+

Back to Visualization

Uses of Color

Identify, Group, Layer, Highlight

@@ -261,19 +261,19 @@ TODO: (also 33 and 34)

  • grouped
  • -
    +

    "Get it right in black & white"

    -
    +

    Legibility

    -
    +

    Cultural Considerations

    -
    +

    Human Variation

    -
    +

    What about "alpha"?

    You will often see a fourth channel: RGBA, HSLA.

    This is known as alpha transparency (translucency).

    @@ -286,10 +286,10 @@ TODO: (also 33 and 34)

    TODO: example

    -
    +

    Tools

    -
    +

    Acknowledgements & References

    Thanks to Alex Hale, Andrew McNutt, and Jessica Hullman for sharing their materials.

      diff --git a/03.charts/Untitled.ipynb b/03.charts/Untitled.ipynb new file mode 100644 index 0000000..221dbdd --- /dev/null +++ b/03.charts/Untitled.ipynb @@ -0,0 +1,77 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "52cc5dd5-93ce-4370-adc0-8842764a359e", + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'vega_datasets'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01maltair\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01malt\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mvega_datasets\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m data\n\u001b[1;32m 4\u001b[0m source \u001b[38;5;241m=\u001b[39m data\u001b[38;5;241m.\u001b[39mstocks()\n\u001b[1;32m 6\u001b[0m lines \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 7\u001b[0m alt\u001b[38;5;241m.\u001b[39mChart(source)\n\u001b[1;32m 8\u001b[0m \u001b[38;5;241m.\u001b[39mmark_line()\n\u001b[1;32m 9\u001b[0m \u001b[38;5;241m.\u001b[39mencode(x\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdate\u001b[39m\u001b[38;5;124m\"\u001b[39m, y\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mprice\u001b[39m\u001b[38;5;124m\"\u001b[39m, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msymbol\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 10\u001b[0m )\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'vega_datasets'" + ] + } + ], + "source": [ + "import altair as alt\n", + "from vega_datasets import data\n", + "\n", + "source = data.stocks()\n", + "\n", + "lines = (\n", + " alt.Chart(source)\n", + " .mark_line()\n", + " .encode(x=\"date\", y=\"price\", color=\"symbol\")\n", + ")\n", + "\n", + "xrule = (\n", + " alt.Chart()\n", + " .mark_rule(color=\"cyan\", strokeWidth=2)\n", + " .encode(x=alt.datum(alt.DateTime(year=2006, month=\"November\")))\n", + ")\n", + "\n", + "yrule = (\n", + " alt.Chart().mark_rule(strokeDash=[12, 6], size=2).encode(y=alt.datum(350))\n", + ")\n", + "\n", + "\n", + "lines + yrule + xrule" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1a208413-acd4-4ec5-a4ac-3e77558ec9bb", + "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 +} diff --git a/03.charts/age-junk.png b/03.charts/age-junk.png new file mode 100644 index 0000000..2ced5fa Binary files /dev/null and b/03.charts/age-junk.png differ diff --git a/03.charts/chartjunk-bullet.webp b/03.charts/chartjunk-bullet.webp new file mode 100644 index 0000000..31ee83a Binary files /dev/null and b/03.charts/chartjunk-bullet.webp differ diff --git a/03.charts/eec.gif b/03.charts/eec.gif new file mode 100644 index 0000000..8f4815e Binary files /dev/null and b/03.charts/eec.gif differ diff --git a/03.charts/examples.ipynb b/03.charts/examples.ipynb new file mode 100644 index 0000000..81a0680 --- /dev/null +++ b/03.charts/examples.ipynb @@ -0,0 +1,177 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 43, + "id": "4a015e87-cf20-47b0-b271-a9dc1c38f2b3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "
      \n", + "" + ], + "text/plain": [ + "alt.LayerChart(...)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import altair as alt\n", + "from vega_datasets import data\n", + "\n", + "source = data.stocks()\n", + "source = source[source[\"date\"] > \"2005-01-01\"]\n", + "\n", + "lines = (\n", + " alt.Chart(source)\n", + " .mark_line()\n", + " .encode(x=\"date\", y=\"price\", color=\"symbol\")\n", + ")\n", + "\n", + "xrule = (\n", + " alt.Chart()\n", + " .mark_rule(color=\"black\", strokeWidth=1)\n", + " .encode(x=alt.datum(alt.DateTime(year=2007, month=\"June\")))\n", + ")\n", + "\n", + "label = (\n", + " alt.Chart()\n", + " .mark_text(color=\"black\", dx=-45, dy=-130)\n", + " .encode(\n", + " x=alt.datum(alt.DateTime(year=2007, month=\"June\")),\n", + " text=alt.datum(\"iPhone Released\"),\n", + " )\n", + ")\n", + "\n", + "xrule2 = (\n", + " alt.Chart()\n", + " .mark_text(color=\"black\", dx=45, dy=60)\n", + " .encode(x=alt.datum(alt.DateTime(year=2008, month=\"November\")),\n", + " text=alt.datum(\"2008 Financial Crisis\"),\n", + " )\n", + "\n", + ")\n", + "\n", + "label2 = (\n", + " alt.Chart()\n", + " .mark_rect(color=\"#cccccc33\")\n", + " .encode(\n", + " x=alt.datum(alt.DateTime(year=2008, month=\"January\")),\n", + " x2=alt.datum(alt.DateTime(year=2009, month=\"January\")),\n", + " text=alt.datum(\"2008 Financial Crisis\"),\n", + " )\n", + ")\n", + "\n", + "\n", + "lines + label + xrule + xrule2 + label2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44096965-f500-4ebf-81c5-c1e8df9d4ea1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f652c1e0-ed86-45cd-b299-4ab662f2437d", + "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 +} diff --git a/03.charts/francetrains.jpg b/03.charts/francetrains.jpg new file mode 100644 index 0000000..6fe2b86 Binary files /dev/null and b/03.charts/francetrains.jpg differ diff --git a/03.charts/labeled.png b/03.charts/labeled.png new file mode 100644 index 0000000..40f13cf Binary files /dev/null and b/03.charts/labeled.png differ diff --git a/03.charts/liefactor.jpg b/03.charts/liefactor.jpg new file mode 100644 index 0000000..1f0cf85 Binary files /dev/null and b/03.charts/liefactor.jpg differ diff --git a/03.charts/sizecycle.gif b/03.charts/sizecycle.gif new file mode 100644 index 0000000..947da26 Binary files /dev/null and b/03.charts/sizecycle.gif differ diff --git a/03.charts/slides.html b/03.charts/slides.html new file mode 100644 index 0000000..9c10b79 --- /dev/null +++ b/03.charts/slides.html @@ -0,0 +1,130 @@ +
      +

      Chart Design

      +

      CAPP 30239

      +
      +
      +

      Today

      +
        +
      • What general principles of visual design are relevant to our work?
      • +
      • What are the common types of charts and how do we use them?
      • +
      • When and how do we break the rules?
      • +
      +
      +
      +

      Edward Tufte

      +

      The Visual Display of Quantitative Information

      +

      +
      +
      +

      Key Ideas

      +
        +
      • Graphical Integrity: Above all else, show the data.
      • +
      • Maximize the data-ink ratio.
      • +
      • Minimize chart-junk.
      • +
      • Aim for high chart density, consider small multiples.
      • +
      • Revision & Editing are essential.
      • +
      +
      +
      +

      Tufte's Principles for Graphical Integrity

      +
      +
      +
        +
      1. The representation of numbers, as physically measured on the surface of the graphic itself, should be directly proportional to the numerical quantities represented.
      2. +
      +

      +

      Mileage increase: 53%
      +Graph length increase: 783%
      +"Lie Factor": 14.8x

      +
      +
      +
        +
      1. Clear, detailed and thorough labeling should be used to defeat graphical distortion and ambiguity.
      2. +
      + +

      How many children get a spinal injury every year? (out of 74,000,000 children in US)

      +
      +
      +
        +
      1. Write out explanation of the data on the graphic itself. Label important events in the data.
      2. +
      +

      +
      +
      +
        +
      1. Show data variation, not design variation.
      2. +
      +

      Deflated & standardized units of money are almost almost superior to nominal units.

      +

      The number of information-carrying (variable) dimensions depicted should not exceed the number of dimensions in the data. (roughly 1:1 channel mapping)

      +

      Exception: It is OK/common to pair color & shape, or for print color & texture to address issues that color presents.

      +
      +
      +

      Data-Ink Ratio

      +
        +
      • Data-ink: Ink (pixels) used to show data.
      • +
      • Data-ink ratio: data-ink / total-ink
      • +
      +

      +
      +
      +

      +
      +
      +

      Optimizing Data Density

      +

      Number of entries in DataFrame / Area of Graphic.

      +

      Classic example of high data density is the sparkline, which can fit on a line of text.

      +

      +
      +
      +

      Chart Junk

      +

      Anything that isn't relevant to understanding the data.

      +
      +
      +


      +via junkcharts.typepad.com

      +
      +
      +

      Common Chart Types

      +

      Bar Charts & Histograms

      +

      Line & Area Charts

      +

      Sparklines

      +

      Strip Plot & Heatmap

      +

      Pie / Donut / Radial Charts

      +

      Ranked Line Chart

      +

      Scatterplots

      +

      Small Multiples / Faceting

      +

      Distributions

      +

      Map Basics

      + +
      +
      +

      When & How to Break the Rules

      +

      2 Examples: Hex / Grid maps ... Word Clouds

      +

      Narrative-supporting graphics

      +

      When it's OK to use 3D

      +
      +
      +

      Acknowledgements & References

      +

      Thanks to Alex Hale, Andrew McNutt, and Jessica Hullman for sharing their materials.

      + +
      +

      .0000003%

      \ No newline at end of file diff --git a/03.charts/slides.md b/03.charts/slides.md new file mode 100644 index 0000000..45f0e6f --- /dev/null +++ b/03.charts/slides.md @@ -0,0 +1,152 @@ +--- +theme: custom-theme +--- + +# Chart Design + +## CAPP 30239 + +--- + +## Today + +- What general **principles of visual design** are relevant to our work? +- What are the **common types of charts** and how do we use them? +- When and how do we break the rules? + +--- + +## Edward Tufte + +### The Visual Display of Quantitative Information + +![](tufte.png) + +--- + +## Key Ideas + +- Graphical Integrity: Above all else, show the data. +- Maximize the data-ink ratio. +- Minimize chart-junk. +- Aim for high chart density, consider *small multiples*. +- Revision & Editing are essential. + +--- + +## Tufte's Principles for **Graphical Integrity** +--- + +1. The representation of numbers, as physically measured on the surface of the graphic itself, should be directly **proportional** to the numerical quantities represented. + +![](liefactor.jpg) + +Mileage increase: 53% +Graph length increase: 783% +"Lie Factor": 14.8x + +--- + +2. Clear, detailed and thorough **labeling** should be used to defeat graphical distortion and ambiguity. + +![bg left](spinal.webp) + +How many children get a spinal injury every year? (out of 74,000,000 children in US) + + + +--- + +3. Write out explanation of the data on the graphic itself. **Label important events** in the data. + +![](labeled.png) + +--- + +4. Show **data variation, not design variation**. + +Deflated & standardized units of money are almost almost superior to nominal units. + +The number of information-carrying (variable) dimensions depicted should not exceed the number of dimensions in the data. (roughly 1:1 channel mapping) + +Exception: It is OK/common to pair color & shape, or for print color & texture to address issues that color presents. + +--- + +## Data-Ink Ratio + +- **Data-ink**: Ink (pixels) used to show data. +- Data-ink ratio: data-ink / total-ink + +![](francetrains.jpg) + +--- + +![](eec.gif) + +![bg right width:600px](sizecycle.gif) + +--- + +## Optimizing Data Density + +Number of entries in DataFrame / Area of Graphic. + +Classic example of high data density is the sparkline, which can fit on a line of text. + +![](sparkline.png) + +--- + +![bg left height:700px](age-junk.png) + +## Chart Junk + +Anything that isn't relevant to understanding the data. + +--- + +![](chartjunk-bullet.webp) +via junkcharts.typepad.com + +--- + +## Common Chart Types + +### Bar Charts & Histograms + +### Line & Area Charts + +### Sparklines + +### Strip Plot & Heatmap + +### Pie / Donut / Radial Charts + +### Ranked Line Chart + +### Scatterplots + +### Small Multiples / Faceting + +### Distributions + +### Map Basics + +### Altair Gallery Miscellania + +--- + +## When & How to Break the Rules + +### 2 Examples: Hex / Grid maps ... Word Clouds +### Narrative-supporting graphics +### When it's OK to use 3D + +--- + +## Acknowledgements & References + +Thanks to Alex Hale, Andrew McNutt, and Jessica Hullman for sharing their materials. + +- https://www2.cs.uh.edu/~ceick/NO/COSC3337-DV2.pdf diff --git a/03.charts/sparkline.png b/03.charts/sparkline.png new file mode 100644 index 0000000..0ddbb37 Binary files /dev/null and b/03.charts/sparkline.png differ diff --git a/03.charts/spinal.webp b/03.charts/spinal.webp new file mode 100644 index 0000000..c8a1b07 Binary files /dev/null and b/03.charts/spinal.webp differ diff --git a/03.charts/tufte.png b/03.charts/tufte.png new file mode 100644 index 0000000..67196c2 Binary files /dev/null and b/03.charts/tufte.png differ diff --git a/Justfile b/Justfile index 8ac35d8..1b43534 100644 --- a/Justfile +++ b/Justfile @@ -1,4 +1,7 @@ +preview lecture: + marp -pw --html --theme custom-theme.css {{lecture}}/slides.md + slides: for file in `ls */slides.md`; do \ - marp $file; \ + marp --theme custom-theme.css $file; \ done diff --git a/pyproject.toml b/pyproject.toml index 2724c1d..a710dc6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,4 +10,5 @@ dependencies = [ "pandas>=2.2.3", "polars>=1.8.2", "ruff>=0.6.8", + "vega-datasets>=0.9.0", ] diff --git a/uv.lock b/uv.lock index 260a27c..d467c3f 100644 --- a/uv.lock +++ b/uv.lock @@ -16,6 +16,7 @@ dependencies = [ { name = "pandas" }, { name = "polars" }, { name = "ruff" }, + { name = "vega-datasets" }, ] [package.metadata] @@ -25,6 +26,7 @@ requires-dist = [ { name = "pandas", specifier = ">=2.2.3" }, { name = "polars", specifier = ">=1.8.2" }, { name = "ruff", specifier = ">=0.6.8" }, + { name = "vega-datasets", specifier = ">=0.9.0" }, ] [[package]] @@ -1696,6 +1698,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", size = 126338 }, ] +[[package]] +name = "vega-datasets" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/a0/ce608d9a5b82fce2ebaa2311136b1e1d1dc2807f501bbdfa56bd174fff76/vega_datasets-0.9.0.tar.gz", hash = "sha256:9dbe9834208e8ec32ab44970df315de9102861e4cda13d8e143aab7a80d93fc0", size = 215013 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/9f/ca52771fe972e0dcc5167fedb609940e01516066938ff2ee28b273ae4f29/vega_datasets-0.9.0-py3-none-any.whl", hash = "sha256:3d7c63917be6ca9b154b565f4779a31fedce57b01b5b9d99d8a34a7608062a1d", size = 210822 }, +] + [[package]] name = "wcwidth" version = "0.2.13"