Skip to content

Commit ba3ffd9

Browse files
authored
Add Altair demo tab to landing page (#16)
* Add Altair demo tab to landing page * Enable vegafusion data transformer for large Altair datasets * Fix Altair rendering: vegafusion, vl-convert, and faceted chart sizing
1 parent 28643f9 commit ba3ffd9

3 files changed

Lines changed: 234 additions & 4 deletions

File tree

index.qmd

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import plotnine as p9
2828
import seaborn as sns
2929
import seaborn.objects as so
3030
from matplotlib.figure import Figure
31+
import altair as alt
32+
import pandas as pd
3133
import polars as pl
3234
import pymc as pm
3335
import tidydraws as td
@@ -231,6 +233,73 @@ fig = Figure(figsize=(8, 6))
231233
232234
fig
233235
```
236+
237+
#### altair
238+
239+
```{python}
240+
# | fig-cap: "Posterior forest plot, density, prior vs posterior, and predictive fit via Altair."
241+
alt.data_transformers.enable("vegafusion")
242+
# Forest plot
243+
alt_forest = (
244+
alt
245+
.layer(
246+
alt
247+
.Chart(beta_summary.to_pandas())
248+
.mark_errorbar(ticks=True)
249+
.encode(x="groups:N", y="beta_lower:Q", y2="beta_upper:Q"),
250+
alt
251+
.Chart(beta_summary.to_pandas())
252+
.mark_point(color="steelblue")
253+
.encode(x="groups:N", y="beta:Q"),
254+
alt
255+
.Chart(pd.DataFrame({"y0": [0]}))
256+
.mark_rule(color="#888888", strokeDash=[4, 4])
257+
.encode(y="y0:Q"),
258+
)
259+
.resolve_scale(y="shared")
260+
.properties(title="Forest plot", width=200, height=200)
261+
)
262+
263+
# Density
264+
alt_density = (
265+
alt
266+
.Chart(beta_df.to_pandas())
267+
.transform_density("beta", groupby=["groups"], as_=["beta", "density"])
268+
.mark_area(opacity=0.5)
269+
.encode(x="beta:Q", y="density:Q", color="groups:N")
270+
.properties(title="Posterior density", width=200, height=200)
271+
)
272+
alt_compare = (
273+
alt
274+
.Chart(compare.to_pandas())
275+
.transform_density("beta", groupby=["groups", "source"], as_=["beta", "density"])
276+
.mark_area(opacity=0.5)
277+
.encode(x="beta:Q", y="density:Q", color="source:N")
278+
.properties(width=95, height=85)
279+
.facet("groups:N", columns=2)
280+
.properties(title="Prior vs posterior")
281+
)
282+
# Predictive fit
283+
alt_pred = (
284+
alt
285+
.layer(
286+
alt
287+
.Chart(pred_summary.to_pandas())
288+
.mark_area(opacity=0.25)
289+
.encode(x="x:Q", y="mu_lower:Q", y2="mu_upper:Q", color="group:N"),
290+
alt
291+
.Chart(pred_summary.to_pandas())
292+
.mark_line()
293+
.encode(x="x:Q", y="mu:Q", color="group:N"),
294+
)
295+
.resolve_scale(y="shared")
296+
.properties(title="Predictive fit", width=200, height=200)
297+
)
298+
299+
(
300+
alt.hconcat(alt_forest, alt_density) & alt.hconcat(alt_compare, alt_pred)
301+
).resolve_scale(color="independent")
302+
```
234303
::::
235304

236305

pyproject.toml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ dependencies = [
3333
"xarray",
3434
"numpy",
3535
"pyarrow>=24.0.0",
36+
"vegafusion-python-embed>=1.6",
3637
]
3738

3839
[project.optional-dependencies]
@@ -43,9 +44,16 @@ plotnine = [
4344
"plotnine",
4445
"seaborn",
4546
]
47+
altair = [
48+
"altair>=6.2.2",
49+
"vegafusion>=2.0",
50+
"vegafusion-python-embed>=1.6",
51+
"vl-convert-python>=1.9.0",
52+
]
4653
all = [
4754
"tidydraws[letsplot]",
4855
"tidydraws[plotnine]",
56+
"tidydraws[altair]",
4957
]
5058

5159
dev = [
@@ -57,8 +65,11 @@ dev = [
5765
"ipykernel",
5866
"quarto >=0.1",
5967
"great-docs>=0.14.0",
60-
"lets-plot",
6168
"plotnine",
69+
"altair>=6.2.2",
70+
"vegafusion>=2.0.3",
71+
"vegafusion-python-embed>=1.6",
72+
"vl-convert-python>=1.9.0",
6273
]
6374

6475
[project.urls]
@@ -78,6 +89,9 @@ dev = [
7889
"plotnine",
7990
"pymc>=6.0.1",
8091
"pytest-cov>=7.1.0",
92+
"altair>=6.2.2",
93+
"vegafusion>=2.0.3",
94+
"vl-convert-python>=1.9.0",
8195
]
8296

8397
[tool.ruff]

0 commit comments

Comments
 (0)