#!/usr/bin/env python # coding: utf-8 # In[1]: import duckdb import lets_plot as lp lp.LetsPlot.setup_html() # In[2]: lp.__version__, duckdb.__version__ # In[3]: 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 # In[4]: ( 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') ) ) # In[5]: ( 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') ) ) # In[6]: ( 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') ) ) # In[7]: ( 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') ) ) # In[ ]: