danielle navarro


About the workshop

Computer-generated artwork has been around for quite a while. The idea of using R for this purpose, however, is a little more recent. Designed originally as a programming language for academic statistical computing, R is now a mainstream language for data science and analytics. Can it also work as an artistic medium? Is there an overlap between our familiar data science workflows and the artistic process? Perhaps we can become better data scientists through art, and vice versa.

This workshop provides a hands-on introduction to generative art in R. You’ll learn artistic techniques that generative artists use regularly in their work including flow fields, iterative function systems, and more. You’ll also learn about R packages specialised for generative art. But more than that, you’ll learn how to reuse skills you already have as part of an artistic process: with a little work, ggplot2, dplyr, and Rcpp can become an artist’s best friends. The assumed background is that you’re reasonably comfortable using R and RStudio, and have experience with tidyverse.

GitHub repository:

About the instructor

Danielle Navarro is a generative artist, data scientist, professional educator, mathematical psychologist, academic professor in recovery, open source R developer, and occasional essayist. She is currently a developer advocate at Voltron Data working with the Apache Arrow ecosystem. You can find her art at, and other professional details at Danielle lives in Sydney, Australia with her two children and her Netflix subscription.

Day 1: July 25

Get started

  • Time: 09:00 - 10:30
  • Description: Hands on introduction to generative art. Make your own pieces using {ggplot2} and {dplyr}

Spatial noise tricks

  • Time: 11:00 - 12:30
  • Description: Multidimensional noise generators. Flow fields, fractals, and more using the {ambient} package

Polygon tricks

  • Time: 13:30 - 15:00
  • Description: Learn how to create textures with recursive polygon deformation, draw wonky hearts as animated gifs, and convert boring lines to textured strokes

Shading tricks

  • Time: 15:30 - 17:00
  • Description: Learn how to use {rayshader} to add depth to 2D plots, and generate 3D graphics from generative art

Day 2: July 26

Iterated function systems

  • Time: 09:00 - 10:30
  • Description: Iterated function systems. Embrace the chaotic joy of the fractal flame and render quickly with {Rcpp}. This one is a bit technical

Tiles and tesselations

  • Time: 11:00 - 12:30
  • Description: Make lovely things by subdividing a rectangle, explore Voronoi tesselations, and have a passing encounter with Truchet tiles

Pixel filters

  • Time: 13:30 - 15:00
  • Description: Manipulate ggplot objects as if they were raster graphics using {ggfx}: learn to dither, mask, displace, blend, and more. The {flametree} package makes as special guest appearance in this one

Wrapping up

  • Time: 15:30 - 17:00
  • Description: A comment on creativity in art and code