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
dm_draw()dm_set_colors()dm_get_colors()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(color = FALSE)
flights_dm_w_many_keys#> ── Metadata ───────────────────────────────────────────────────────────────
#> Tables: `airlines`, `airports`, `flights`, `planes`, `weather`
#> Columns: 53
#> Primary keys: 4
#> Foreign keys: 4
The schema is drawn with dm_draw().
dm_draw(flights_dm_w_many_keys)
#> Error in loadNamespace(x): there is no package called 'DiagrammeRsvg'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()
#> [1] "default" "white" "aliceblue"
#> [4] "antiquewhite" "antiquewhite1" "antiquewhite2"
#> [7] "antiquewhite3" "antiquewhite4" "aquamarine"
#> [10] "aquamarine1" "aquamarine2" "aquamarine3"
#> [13] "aquamarine4" "azure" "azure1"
#> [16] "azure2" "azure3" "azure4"
#> [19] "beige" "bisque" "bisque1"
#> [22] "bisque2" "bisque3" "bisque4"
#> [25] "black" "blanchedalmond" "blue"
#> [28] "blue1" "blue2" "blue3"
#> [31] "blue4" "blueviolet" "brown"
#> [34] "brown1" "brown2" "brown3"
#> [37] "brown4" "burlywood" "burlywood1"
#> [40] "burlywood2" "burlywood3" "burlywood4"
#> [43] "cadetblue" "cadetblue1" "cadetblue2"
#> [46] "cadetblue3" "cadetblue4" "chartreuse"
#> [49] "chartreuse1" "chartreuse2" "chartreuse3"
#> [52] "chartreuse4" "chocolate" "chocolate1"
#> [55] "chocolate2" "chocolate3" "chocolate4"
#> [58] "coral" "coral1" "coral2"
#> [61] "coral3" "coral4" "cornflowerblue"
#> [64] "cornsilk" "cornsilk1" "cornsilk2"
#> [67] "cornsilk3" "cornsilk4" "cyan"
#> [70] "cyan1" "cyan2" "cyan3"
#> [73] "cyan4" "darkblue" "darkcyan"
#> [76] "darkgoldenrod" "darkgoldenrod1" "darkgoldenrod2"
#> [79] "darkgoldenrod3" "darkgoldenrod4" "darkgray"
#> [82] "darkgreen" "darkgrey" "darkkhaki"
#> [85] "darkmagenta" "darkolivegreen" "darkolivegreen1"
#> [88] "darkolivegreen2" "darkolivegreen3" "darkolivegreen4"
#> [91] "darkorange" "darkorange1" "darkorange2"
#> [94] "darkorange3" "darkorange4" "darkorchid"
#> [97] "darkorchid1" "darkorchid2" "darkorchid3"
#> [100] "darkorchid4" "darkred" "darksalmon"
#> [103] "darkseagreen" "darkseagreen1" "darkseagreen2"
#> [106] "darkseagreen3" "darkseagreen4" "darkslateblue"
#> [109] "darkslategray" "darkslategray1" "darkslategray2"
#> [112] "darkslategray3" "darkslategray4" "darkslategrey"
#> [115] "darkturquoise" "darkviolet" "deeppink"
#> [118] "deeppink1" "deeppink2" "deeppink3"
#> [121] "deeppink4" "deepskyblue" "deepskyblue1"
#> [124] "deepskyblue2" "deepskyblue3" "deepskyblue4"
#> [127] "dimgray" "dimgrey" "dodgerblue"
#> [130] "dodgerblue1" "dodgerblue2" "dodgerblue3"
#> [133] "dodgerblue4" "firebrick" "firebrick1"
#> [136] "firebrick2" "firebrick3" "firebrick4"
#> [139] "floralwhite" "forestgreen" "gainsboro"
#> [142] "ghostwhite" "gold" "gold1"
#> [145] "gold2" "gold3" "gold4"
#> [148] "goldenrod" "goldenrod1" "goldenrod2"
#> [151] "goldenrod3" "goldenrod4" "gray"
#> [154] "gray0" "gray1" "gray2"
#> [157] "gray3" "gray4" "gray5"
#> [160] "gray6" "gray7" "gray8"
#> [163] "gray9" "gray10" "gray11"
#> [166] "gray12" "gray13" "gray14"
#> [169] "gray15" "gray16" "gray17"
#> [172] "gray18" "gray19" "gray20"
#> [175] "gray21" "gray22" "gray23"
#> [178] "gray24" "gray25" "gray26"
#> [181] "gray27" "gray28" "gray29"
#> [184] "gray30" "gray31" "gray32"
#> [187] "gray33" "gray34" "gray35"
#> [190] "gray36" "gray37" "gray38"
#> [193] "gray39" "gray40" "gray41"
#> [196] "gray42" "gray43" "gray44"
#> [199] "gray45" "gray46" "gray47"
#> [202] "gray48" "gray49" "gray50"
#> [205] "gray51" "gray52" "gray53"
#> [208] "gray54" "gray55" "gray56"
#> [211] "gray57" "gray58" "gray59"
#> [214] "gray60" "gray61" "gray62"
#> [217] "gray63" "gray64" "gray65"
#> [220] "gray66" "gray67" "gray68"
#> [223] "gray69" "gray70" "gray71"
#> [226] "gray72" "gray73" "gray74"
#> [229] "gray75" "gray76" "gray77"
#> [232] "gray78" "gray79" "gray80"
#> [235] "gray81" "gray82" "gray83"
#> [238] "gray84" "gray85" "gray86"
#> [241] "gray87" "gray88" "gray89"
#> [244] "gray90" "gray91" "gray92"
#> [247] "gray93" "gray94" "gray95"
#> [250] "gray96" "gray97" "gray98"
#> [253] "gray99" "gray100" "green"
#> [256] "green1" "green2" "green3"
#> [259] "green4" "greenyellow" "grey"
#> [262] "grey0" "grey1" "grey2"
#> [265] "grey3" "grey4" "grey5"
#> [268] "grey6" "grey7" "grey8"
#> [271] "grey9" "grey10" "grey11"
#> [274] "grey12" "grey13" "grey14"
#> [277] "grey15" "grey16" "grey17"
#> [280] "grey18" "grey19" "grey20"
#> [283] "grey21" "grey22" "grey23"
#> [286] "grey24" "grey25" "grey26"
#> [289] "grey27" "grey28" "grey29"
#> [292] "grey30" "grey31" "grey32"
#> [295] "grey33" "grey34" "grey35"
#> [298] "grey36" "grey37" "grey38"
#> [301] "grey39" "grey40" "grey41"
#> [304] "grey42" "grey43" "grey44"
#> [307] "grey45" "grey46" "grey47"
#> [310] "grey48" "grey49" "grey50"
#> [313] "grey51" "grey52" "grey53"
#> [316] "grey54" "grey55" "grey56"
#> [319] "grey57" "grey58" "grey59"
#> [322] "grey60" "grey61" "grey62"
#> [325] "grey63" "grey64" "grey65"
#> [328] "grey66" "grey67" "grey68"
#> [331] "grey69" "grey70" "grey71"
#> [334] "grey72" "grey73" "grey74"
#> [337] "grey75" "grey76" "grey77"
#> [340] "grey78" "grey79" "grey80"
#> [343] "grey81" "grey82" "grey83"
#> [346] "grey84" "grey85" "grey86"
#> [349] "grey87" "grey88" "grey89"
#> [352] "grey90" "grey91" "grey92"
#> [355] "grey93" "grey94" "grey95"
#> [358] "grey96" "grey97" "grey98"
#> [361] "grey99" "grey100" "honeydew"
#> [364] "honeydew1" "honeydew2" "honeydew3"
#> [367] "honeydew4" "hotpink" "hotpink1"
#> [370] "hotpink2" "hotpink3" "hotpink4"
#> [373] "indianred" "indianred1" "indianred2"
#> [376] "indianred3" "indianred4" "ivory"
#> [379] "ivory1" "ivory2" "ivory3"
#> [382] "ivory4" "khaki" "khaki1"
#> [385] "khaki2" "khaki3" "khaki4"
#> [388] "lavender" "lavenderblush" "lavenderblush1"
#> [391] "lavenderblush2" "lavenderblush3" "lavenderblush4"
#> [394] "lawngreen" "lemonchiffon" "lemonchiffon1"
#> [397] "lemonchiffon2" "lemonchiffon3" "lemonchiffon4"
#> [400] "lightblue" "lightblue1" "lightblue2"
#> [403] "lightblue3" "lightblue4" "lightcoral"
#> [406] "lightcyan" "lightcyan1" "lightcyan2"
#> [409] "lightcyan3" "lightcyan4" "lightgoldenrod"
#> [412] "lightgoldenrod1" "lightgoldenrod2" "lightgoldenrod3"
#> [415] "lightgoldenrod4" "lightgoldenrodyellow" "lightgray"
#> [418] "lightgreen" "lightgrey" "lightpink"
#> [421] "lightpink1" "lightpink2" "lightpink3"
#> [424] "lightpink4" "lightsalmon" "lightsalmon1"
#> [427] "lightsalmon2" "lightsalmon3" "lightsalmon4"
#> [430] "lightseagreen" "lightskyblue" "lightskyblue1"
#> [433] "lightskyblue2" "lightskyblue3" "lightskyblue4"
#> [436] "lightslateblue" "lightslategray" "lightslategrey"
#> [439] "lightsteelblue" "lightsteelblue1" "lightsteelblue2"
#> [442] "lightsteelblue3" "lightsteelblue4" "lightyellow"
#> [445] "lightyellow1" "lightyellow2" "lightyellow3"
#> [448] "lightyellow4" "limegreen" "linen"
#> [451] "magenta" "magenta1" "magenta2"
#> [454] "magenta3" "magenta4" "maroon"
#> [457] "maroon1" "maroon2" "maroon3"
#> [460] "maroon4" "mediumaquamarine" "mediumblue"
#> [463] "mediumorchid" "mediumorchid1" "mediumorchid2"
#> [466] "mediumorchid3" "mediumorchid4" "mediumpurple"
#> [469] "mediumpurple1" "mediumpurple2" "mediumpurple3"
#> [472] "mediumpurple4" "mediumseagreen" "mediumslateblue"
#> [475] "mediumspringgreen" "mediumturquoise" "mediumvioletred"
#> [478] "midnightblue" "mintcream" "mistyrose"
#> [481] "mistyrose1" "mistyrose2" "mistyrose3"
#> [484] "mistyrose4" "moccasin" "navajowhite"
#> [487] "navajowhite1" "navajowhite2" "navajowhite3"
#> [490] "navajowhite4" "navy" "navyblue"
#> [493] "oldlace" "olivedrab" "olivedrab1"
#> [496] "olivedrab2" "olivedrab3" "olivedrab4"
#> [499] "orange" "orange1" "orange2"
#> [502] "orange3" "orange4" "orangered"
#> [505] "orangered1" "orangered2" "orangered3"
#> [508] "orangered4" "orchid" "orchid1"
#> [511] "orchid2" "orchid3" "orchid4"
#> [514] "palegoldenrod" "palegreen" "palegreen1"
#> [517] "palegreen2" "palegreen3" "palegreen4"
#> [520] "paleturquoise" "paleturquoise1" "paleturquoise2"
#> [523] "paleturquoise3" "paleturquoise4" "palevioletred"
#> [526] "palevioletred1" "palevioletred2" "palevioletred3"
#> [529] "palevioletred4" "papayawhip" "peachpuff"
#> [532] "peachpuff1" "peachpuff2" "peachpuff3"
#> [535] "peachpuff4" "peru" "pink"
#> [538] "pink1" "pink2" "pink3"
#> [541] "pink4" "plum" "plum1"
#> [544] "plum2" "plum3" "plum4"
#> [547] "powderblue" "purple" "purple1"
#> [550] "purple2" "purple3" "purple4"
#> [553] "red" "red1" "red2"
#> [556] "red3" "red4" "rosybrown"
#> [559] "rosybrown1" "rosybrown2" "rosybrown3"
#> [562] "rosybrown4" "royalblue" "royalblue1"
#> [565] "royalblue2" "royalblue3" "royalblue4"
#> [568] "saddlebrown" "salmon" "salmon1"
#> [571] "salmon2" "salmon3" "salmon4"
#> [574] "sandybrown" "seagreen" "seagreen1"
#> [577] "seagreen2" "seagreen3" "seagreen4"
#> [580] "seashell" "seashell1" "seashell2"
#> [583] "seashell3" "seashell4" "sienna"
#> [586] "sienna1" "sienna2" "sienna3"
#> [589] "sienna4" "skyblue" "skyblue1"
#> [592] "skyblue2" "skyblue3" "skyblue4"
#> [595] "slateblue" "slateblue1" "slateblue2"
#> [598] "slateblue3" "slateblue4" "slategray"
#> [601] "slategray1" "slategray2" "slategray3"
#> [604] "slategray4" "slategrey" "snow"
#> [607] "snow1" "snow2" "snow3"
#> [610] "snow4" "springgreen" "springgreen1"
#> [613] "springgreen2" "springgreen3" "springgreen4"
#> [616] "steelblue" "steelblue1" "steelblue2"
#> [619] "steelblue3" "steelblue4" "tan"
#> [622] "tan1" "tan2" "tan3"
#> [625] "tan4" "thistle" "thistle1"
#> [628] "thistle2" "thistle3" "thistle4"
#> [631] "tomato" "tomato1" "tomato2"
#> [634] "tomato3" "tomato4" "turquoise"
#> [637] "turquoise1" "turquoise2" "turquoise3"
#> [640] "turquoise4" "violet" "violetred"
#> [643] "violetred1" "violetred2" "violetred3"
#> [646] "violetred4" "wheat" "wheat1"
#> [649] "wheat2" "wheat3" "wheat4"
#> [652] "whitesmoke" "yellow" "yellow1"
#> [655] "yellow2" "yellow3" "yellow4"
#> [658] "yellowgreen"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)
#> Error in loadNamespace(x): there is no package called 'DiagrammeRsvg'The colors can be queried with dm_get_colors().
dm_get_colors(flights_dm_w_many_keys_and_colors)
#> #FFA500FF #FFA500FF #8B1C62FF #5986C4FF default
#> "airlines" "airports" "flights" "planes" "weather"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")
#> Error in loadNamespace(x): there is no package called 'DiagrammeRsvg'If you would like to visualize only a 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()
#> Error in loadNamespace(x): there is no package called 'DiagrammeRsvg'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")The code for the functions in this section is borrowed from the {datamodelr} package.↩︎