Visualizing dm objects

2024-01-21

Once you have all your primary keys set and all foreign key relations defined, a graphical representation of your data model offers a condensed view of the tables and the relationships between the tables. The following functions can be used to visualize the dm object:1

  1. dm_draw()
  2. dm_set_colors()
  3. dm_get_colors()
  4. dm_get_available_colors()

We use the prepared example dm object dm_nycflights13(cycle = TRUE):

library(dm)
library(dplyr)
flights_dm_w_many_keys <- dm_nycflights13(cycle = TRUE, color = FALSE)
flights_dm_w_many_keys

The schema is drawn with dm_draw().

dm_draw(flights_dm_w_many_keys)

You can use colors to visually group your tables into families to reflect their logical grouping. The available colors are either hexcoded colors or the standard R color names. The function dm_get_available_colors() forwards to grDevices::colors():

dm_get_available_colors()

Colors are assigned with dm_set_colors() using syntax known in the {tidyverse} as {tidyselect}-syntax, here in the form: color = table. Select helper functions are supported. The result of dm_set_colors() is a dm object. The information about the color is stored together with the rest of the metadata.

flights_dm_w_many_keys_and_colors <-
  flights_dm_w_many_keys %>%
  dm_set_colors(
    maroon4 = flights,
    orange = starts_with("air"),
    "#5986C4" = planes
  )

Draw the schema with dm_draw().

dm_draw(flights_dm_w_many_keys_and_colors)

The colors can be queried with dm_get_colors().

dm_get_colors(flights_dm_w_many_keys_and_colors)

See the documentation for dm_draw() for further options. One important argument is view_type. Besides the default "keys_only", it accepts "all" to display all columns, and "title_only" to show only the title of the table.

flights_dm_w_many_keys_and_colors %>%
  dm_draw(view_type = "title_only")

If you would like to visualize only some of the tables, use dm_select_tbl() before drawing:

flights_dm_w_many_keys_and_colors %>%
  dm_select_tbl(flights, airports, planes) %>%
  dm_draw()

Finally, for exporting a drawing to svg you could use DiagrammeRsvg::export_svg():

flights_dm_w_many_keys_and_colors %>%
  dm_select_tbl(flights, airports, planes) %>%
  dm_draw() %>%
  DiagrammeRsvg::export_svg() %>%
  write("flights_dm_w_many_keys_and_color.svg")

  1. The code for the functions in this section is borrowed from the {datamodelr} package.↩︎