import duckdb
import lets_plot as lp
lp.LetsPlot.setup_html()
lp.__version__, duckdb.__version__
('4.6.2', '1.3.0')
n = 2
data = duckdb.query(f"""
WITH input AS (
FROM range({n}) x(i)
)
FROM input i1
CROSS JOIN input i2
SELECT
i1.i AS x
, i2.i AS y
, (i1.i + i2.i) % {n} AS fill
""")
data
┌───────┬───────┬───────┐ │ x │ y │ fill │ │ int64 │ int64 │ int64 │ ├───────┼───────┼───────┤ │ 0 │ 0 │ 0 │ │ 1 │ 0 │ 1 │ │ 0 │ 1 │ 1 │ │ 1 │ 1 │ 0 │ └───────┴───────┴───────┘
(
lp
.ggplot(data=duckdb.query("""
FROM data
SELECT
x + 0.5 AS x
, y + 0.5 AS y
, fill
""").to_df())
+ lp.geom_tile(
mapping=lp.aes(x='x', y='y', fill='fill')
)
)
(
lp
.ggplot(data=duckdb.query("""
FROM data
SELECT
x + 0.5 AS x
, y + 0.5 AS y
, fill
""").to_df())
+ lp.geom_livemap()
+ lp.geom_tile(
mapping=lp.aes(x='x', y='y', fill='fill')
)
)
(
lp
.ggplot(data=duckdb.query("""
FROM data
SELECT
x AS xmin
, x + 1 AS xmax
, y AS ymin
, y + 1 AS ymax
, fill
""").to_df())
+ lp.geom_rect(
mapping=lp.aes(xmin='xmin', xmax='xmax', ymin='ymin', ymax='ymax', fill='fill')
)
)
(
lp
.ggplot(data=duckdb.query("""
FROM data
SELECT
x AS xmin
, x + 1 AS xmax
, y AS ymin
, y + 1 AS ymax
, fill
""").to_df())
+ lp.geom_livemap()
+ lp.geom_rect(
mapping=lp.aes(xmin='xmin', xmax='xmax', ymin='ymin', ymax='ymax', fill='fill')
)
)