4  Examples

The examples show some challenges, work-around, and exploitation of the features of both the tiny_pedigree function and gt tables.

Initialize the needed packages.

Show the code
## Activate the Core Packages
library(tidyverse) ## Brings in a core of useful functions
library(gt)        ## Tables

## special libraries
library(kinship2)  ## Core package to calculate and plot
library(R.devices) ## External plot files (e.g., PNG)
library(tinypedigree) ## For the tiny_pedigree function

4.1 Eight Generations

There are a lot of individuals to fit on this pedigree diagram. Perhaps too many as the typesize, in particular, must be very small.

Note that there is an interaction between the typesize and fold parameters. Folding the names doesn’t help.

Warning: row (generation) spacing seems to be disrupted at the lowest row in a many-generation diagram if there are several individuals at the lowest level.

Show the code
data <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
 "ID, dad, mom, gender, born, died
 Charles Wentworth, NA, NA, male, 1648, 1780
 Amariah Wentworth, Charles Wentworth, Bethiah Fenno, male, 1719, 1799
 Bethiah Fenno, NA, NA, female, 1692, 1780 
 Rebecca Shepard, NA, NA, female, 1723, 1791
 Elijah Wentworth, Amariah Wentworth, Rebecca Shepard, male, 1775, 1810
 Elijah S. Estes, NA, NA, male, 1814, 1887
 Zebiah Walker Wentworth, Elijah Wentworth, Lucy Walker, female, 1810, 1887
 Lucy Walker, NA, NA, female, NA, NA
 Mary Adeline Palmer, NA, NA, female, 1848, 1918
 Lorenzo Langston Estes, Elijah S. Estes, Zebiah Walker Wentworth, male, 1839, 1909
 Addie Estes, Lorenzo Langston Estes, Mary Adeline Palmer, female, NA, NA
 Charles A. Bridges, NA, NA, male, 1877, NA
 Charles L. Bridges, Charles A. Bridges, Addie Estes, male, 1912, 2001
 Mary Jane Bridges, NA, NA, female, 1912, 2016
 Thomas Bridges, Charles L. Bridges, Mary Jane Bridges, male, 1938, NA
 Kent Bridges, Charles L. Bridges, Mary Jane Bridges, male, 1941, NA")

## Assign or calculate enhancements
data$hilite <- TRUE
data <- data |>
 mutate(color = case_when(
 gender == "female" ~ "lightblue",
 gender == "male" ~ "lightsalmon1"))

## Create a presentation table
gt(data) |>
 cols_hide(columns = c(dad, mom, gender, hilite, color)) |>
 tab_source_note(source_note="Source: Bridges family documents")
ID born died
Charles Wentworth 1648 1780
Amariah Wentworth 1719 1799
Bethiah Fenno 1692 1780
Rebecca Shepard 1723 1791
Elijah Wentworth 1775 1810
Elijah S. Estes 1814 1887
Zebiah Walker Wentworth 1810 1887
Lucy Walker NA NA
Mary Adeline Palmer 1848 1918
Lorenzo Langston Estes 1839 1909
Addie Estes NA NA
Charles A. Bridges 1877 NA
Charles L. Bridges 1912 2001
Mary Jane Bridges 1912 2016
Thomas Bridges 1938 NA
Kent Bridges 1941 NA
Source: Bridges family documents
Show the code
tiny_pedigree(data=data, textsize=0.5, symbolsize=0.8, fold=FALSE)

Breaking the pedigree into smaller sets is a way around some of the limitations seen in the last pedigree diagram.

Show the code
## Divide the data into two halves

## First Half
data1 <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
 "ID, dad, mom, gender, born, died
 Charles Wentworth, NA, NA, male, 1648, 1780
 Amariah Wentworth, Charles Wentworth, Bethiah Fenno, male, 1719, 1799
 Bethiah Fenno, NA, NA, female, 1692, 1780 
 Rebecca Shepard, NA, NA, female, 1723, 1791
 Elijah Wentworth, Amariah Wentworth, Rebecca Shepard, male, 1775, 1810
 Elijah S. Estes, NA, NA, male, 1814, 1887
 Zebiah Walker Wentworth, Elijah Wentworth, Lucy Walker, female, 1810, 1887
 Lucy Walker, NA, NA, female, NA, NA
 Lorenzo Langston Estes, Elijah S. Estes, Zebiah Walker Wentworth, male, 1839, 1909")

## Second Half
data2 <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
 "ID, dad, mom, gender, born, died
 Mary Adeline Palmer, NA, NA, female, 1848, 1918
 Lorenzo Langston Estes, NA, NA, male, 1839, 1909
 Addie Estes, Lorenzo Langston Estes, Mary Adeline Palmer, female, NA, NA
 Charles A. Bridges, NA, NA, male, 1877, NA
 Charles L. Bridges, Charles A. Bridges, Addie Estes, male, 1912, 2001
 Mary Jane Bridges, NA, NA, female, 1912, 2016
 Thomas Bridges, Charles L. Bridges, Mary Jane Bridges, male, 1938, NA
 Kent Bridges, Charles L. Bridges, Mary Jane Bridges, male, 1941, NA")

## Assign or calculate enhancements to the first half
data1$hilite <- TRUE
data1 <- data1 |>
 mutate(color = case_when(
 gender == "female" ~ "lightblue",
 gender == "male" ~ "lightsalmon1"))

## Generate a pedigree from the first half
tiny_pedigree(data=data1, symbolsize=1.1, fold=FALSE)

Show the code
## Assign or calculate enhancements to the second half
data2$hilite <- TRUE
data2 <- data2 |>
 mutate(color = case_when(
 gender == "female" ~ "lightblue",
 gender == "male" ~ "lightsalmon1"))

## Generate a pedigree from the second half
tiny_pedigree(data=data2, textsize=0.6, symbolsize=1.1, fold=FALSE)

Show the code
## Join (row bind) the two halves
## The first two lines of second half are not needed
data <- rbind(data1, data2[3:nrow(data2),])

## Create a presentation table
gt(data) |>
 cols_hide(columns=c(dad, mom, gender, hilite, color)) |>
 tab_source_note(source_note="Source: Bridges family documents")
ID born died
Charles Wentworth 1648 1780
Amariah Wentworth 1719 1799
Bethiah Fenno 1692 1780
Rebecca Shepard 1723 1791
Elijah Wentworth 1775 1810
Elijah S. Estes 1814 1887
Zebiah Walker Wentworth 1810 1887
Lucy Walker NA NA
Lorenzo Langston Estes 1839 1909
Addie Estes NA NA
Charles A. Bridges 1877 NA
Charles L. Bridges 1912 2001
Mary Jane Bridges 1912 2016
Thomas Bridges 1938 NA
Kent Bridges 1941 NA
Source: Bridges family documents

4.2 Interpretive information

You can use the color coding to provide information that is not related to the demographic properties of the data.

In the following example, research progress is noted on the pedigree diagram with a color code (green means already interviewed).

Show the code
## Read the basic data (all people are listed)
data <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
 "ID, dad, mom, gender, interviewed 
 Genji, NA, NA, male, no 
 Shizuko, NA, NA, female, yes
 Hiroshi, Genji, Shizuko, male, no 
 Tamaru, Genji, Shizuko, male, yes 
 Osamu, Genji, Shizuko, male, yes 
 Akari, NA, NA, female, no 
 Fumiko, Osamu, Akari, female, no
 Yui, NA, NA, female, yes
 Shota, Hiroshi, Yui, male, no
 Sakura, NA, NA, female, yes")

## Read links for people without children
links <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
  "id1, id2
  Tamaru, Sakura")

## Print a presenttion table
gt(data) |>
 sub_missing(missing_text = "") |>
 cols_hide(columns=c(gender)) |>
 tab_source_note(source_note="Source: Example data")
ID dad mom interviewed
Genji no
Shizuko yes
Hiroshi Genji Shizuko no
Tamaru Genji Shizuko yes
Osamu Genji Shizuko yes
Akari no
Fumiko Osamu Akari no
Yui yes
Shota Hiroshi Yui no
Sakura yes
Source: Example data
Show the code
## Calculate and assign column properties
data <- data |>
 mutate(color = case_when(
 interviewed == "yes" ~ "lightgreen",
 interviewed == "no" ~ "gray85")) |>
 mutate(hilite = TRUE)

## Generate and plot the pedigree structure 
## You need to use the link parameter for "no-children" couples
tiny_pedigree(data=data, links=links)

4.3 Family with lots of children

This is an example of the complexity when there are quite a few children. The software seems to handle this number of individuals, but it is likely close to the limit.

Show the code
data <- read_csv(col_names = TRUE, show_col_types=FALSE, file=
 "ID, father, mother, sex, status
 Howard, NA, NA, male, 1
 Viola, NA, NA, female, 1
 William, Howard, Viola, male, 0
 Alice, Howard, Viola, female, 1
 Wesley, Howard, Viola, male, 0
 David, Howard, Viola, male, 0
 Nancy, Howard, Viola, female, 0 
 Kimo, Howard, Viola, male, 0
 Edward, Howard, Viola, male, 0
 Claudia, NA, NA, female, 0
 Karen, NA, NA, female, 1
 Ayesha, NA, NA, female, 0
 Laurie, NA, NA, female, 0
 Michael, NA, NA, male, 0
 Michiko, NA, NA, female, 0
 Linda, NA, NA, female, 0
 Kim, NA, NA, male, 0
 Angel, William, Claudia, female, 0
 Jolene, William, Claudia, female, 0
 Pono, Wesley, Karen, male, 0
 Gabriel, Wesley, Ayesha, male, 0
 Sokah, Wesley, Laurie, female, 0
 Jessie, Edward, Michiko, male, 0
 Nalani, Kimo, Linda, female, 0
 Leilani, Michael, Alice, female, 0
 Sefu, Michael, Alice, male, 0
 Eric, NA, NA, male, 0
 Scott, NA, NA, male, 0
 Shane, Scott, Angel, male, 0
 Skyler, Scott, Angel, female, 0
 Kalani, NA, NA, male, 0
 Dysen, Kalani, Jolene, male, 0
 Jordyn, Kalani, Jolene, female, 0
 Laura, NA, NA, female, 0
 Salem, Sefu, Laura, male, 0
 Jennifer, NA, NA, female, 0
 Christopher, Gabriel, Jennifer, male, 0
 Vik, NA, NA, female, 0")

## Links for individuals without children
links <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
  "id1, id2
  Kim, Nancy
  Eric, Leilani
  Jessie, Vik")

## Generate a presentation table
gt(data) |>
 cols_hide(columns=c(sex, status)) |>
 sub_missing(missing_text = "") |>
 tab_source_note(source_note="Source: Fuxxxxto family data")
ID father mother
Howard
Viola
William Howard Viola
Alice Howard Viola
Wesley Howard Viola
David Howard Viola
Nancy Howard Viola
Kimo Howard Viola
Edward Howard Viola
Claudia
Karen
Ayesha
Laurie
Michael
Michiko
Linda
Kim
Angel William Claudia
Jolene William Claudia
Pono Wesley Karen
Gabriel Wesley Ayesha
Sokah Wesley Laurie
Jessie Edward Michiko
Nalani Kimo Linda
Leilani Michael Alice
Sefu Michael Alice
Eric
Scott
Shane Scott Angel
Skyler Scott Angel
Kalani
Dysen Kalani Jolene
Jordyn Kalani Jolene
Laura
Salem Sefu Laura
Jennifer
Christopher Gabriel Jennifer
Vik
Source: Fuxxxxto family data
Show the code
## Generate the pedigree data structure (with no-children couples)
tiny_pedigree(data=data, links=links, 
 symbolsize=0.8, textsize = 0.4, fold=FALSE)

4.4 A complex family

Show the code
## Read the data
data <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
 "ID, dad, mom, gender, dead
 Yuji Soxxxxbo, NA, NA, male, 1
 Kunichi Fuxxxxto, NA, NA, male, 1
 Kiyo Soxxxxbo, NA, NA, female, 1
 Ayako Soxxxxbo, Yuji Soxxxxbo, Kiyo Soxxxxbo, female, 1
 Satayoshi Fuxxxxto, Yuji Soxxxxbo, Kiyo Soxxxxbo, male, 1
 Shigeo Soxxxxbo, Yuji Soxxxxbo, Kiyo Soxxxxbo, male, 1
 Howard Fuxxxxto, Kunichi Fuxxxxto, Kiyo Soxxxxbo, male, 1
 Hirui Fuxxxxto, Kunichi Fuxxxxto, Kiyo Soxxxxbo, female, 1 
 Hisano Fuxxxxra, Kunichi Fuxxxxto, Kiyo Soxxxxbo, female, 1
 George Fuxxxxra, NA, NA, male, 1
 Mom Soxxxxbo, NA, NA, female, 1
 Carol Soxxxxbo, NA, NA, female, 0
 Clyde Soxxxxbo, Satayoshi Fuxxxxto, Mom Soxxxxbo, male, 1
 Jane Soxxxxbo, Satayoshi Fuxxxxto, Mom Soxxxxbo, female, 0
 Karen Soxxxxbo, Clyde Soxxxxbo, Carol Soxxxxbo, female, 0
 Amy Soxxxxbo, Clyde Soxxxxbo, Carol Soxxxxbo, female, 1 
 Kiyoko Soxxxxbo, NA, NA, female, 1
 Michael Soxxxxbo, Shigeo Soxxxxbo, Kiyoko Soxxxxbo, male, 0
 Wendy Soxxxxbo, NA, NA, female, 0
 Myra Yamachi, George Fuxxxxra, Hisano Fuxxxxra, male, 0
 David Yamachi, NA, NA, male, 1")

## Links for the individuals without children
links <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
  "id1, id2
  Michael Soxxxxbo, Wendy Soxxxxbo
  Myra Yamachi, David Yamachi")

## Create a presentation table
gt(data) |>
 cols_hide(columns=c(gender, dead)) |>
 sub_missing(missing_text = "") |>
 tab_source_note(source_note="Source: Fuxxxxto family data")
ID dad mom
Yuji Soxxxxbo
Kunichi Fuxxxxto
Kiyo Soxxxxbo
Ayako Soxxxxbo Yuji Soxxxxbo Kiyo Soxxxxbo
Satayoshi Fuxxxxto Yuji Soxxxxbo Kiyo Soxxxxbo
Shigeo Soxxxxbo Yuji Soxxxxbo Kiyo Soxxxxbo
Howard Fuxxxxto Kunichi Fuxxxxto Kiyo Soxxxxbo
Hirui Fuxxxxto Kunichi Fuxxxxto Kiyo Soxxxxbo
Hisano Fuxxxxra Kunichi Fuxxxxto Kiyo Soxxxxbo
George Fuxxxxra
Mom Soxxxxbo
Carol Soxxxxbo
Clyde Soxxxxbo Satayoshi Fuxxxxto Mom Soxxxxbo
Jane Soxxxxbo Satayoshi Fuxxxxto Mom Soxxxxbo
Karen Soxxxxbo Clyde Soxxxxbo Carol Soxxxxbo
Amy Soxxxxbo Clyde Soxxxxbo Carol Soxxxxbo
Kiyoko Soxxxxbo
Michael Soxxxxbo Shigeo Soxxxxbo Kiyoko Soxxxxbo
Wendy Soxxxxbo
Myra Yamachi George Fuxxxxra Hisano Fuxxxxra
David Yamachi
Source: Fuxxxxto family data
Show the code
## Color all the symbols 
data$color <- "gray85"
data$hilite <- TRUE

## Modify the color of a specific row
data$color[7] <- "pink"

## Generate the plot the pedigree
tiny_pedigree(data=data, links=links,
              textsize = 0.7,
              symbolsize = 0.8)

4.5 Two families combined

Show the code
## Read the data
data <- read_csv(col_names = TRUE, show_col_types=FALSE, file=
 "ID, father, mother, sex, status
 Herbert Kaxxxxra, NA, NA, male, 1
 Hideko Kaxxxxra, NA, NA, female, 1
 Brian Kaxxxxra, Herbert Kaxxxxra, Hideko Kaxxxxra, male, 0
 Nancy Kaxxxxra, NA, NA, female, 0
 Candy Kaxxxxra, Herbert Kaxxxxra, Hideko Kaxxxxra, female, 0
 Debbie Kaxxxxra, Herbert Kaxxxxra, Hideko Kaxxxxra, female, 0
 Neil Naxxta, NA, NA, male, 0
 Doreen Kaxxxxra, Herbert Kaxxxxra, Hideko Kaxxxxra, female, 0
 Ayako Soxxxxbo, NA, NA, female, 1
 Jinpachi Naxxxxxma, NA, NA, male, 1
 Colleen Kaxxxxra, Herbert Kaxxxxra, Hideko Kaxxxxra, female, 0
 Kevin Naxxxxxma, Jason Naxxxxxma, Eleanor Oyxma, male, 0
 Terry Naxxxxxma, Jason Naxxxxxma, Eleanor Oyxma, male, 0
 Cory Naxxxxxma, Terry Naxxxxxma, Colleen Kaxxxxra, male, 0
 Karen Naxxxxxma, Terry Naxxxxxma, Colleen Kaxxxxra, female, 0
 Jason Naxxxxxma, Jinpachi Naxxxxxma, Ayako Soxxxxbo, male, 1
 Sachiko Naxxxxxma,  Jinpachi Naxxxxxma, Ayako Soxxxxbo, female, 1
 Jerry Naxxxxxma, Jinpachi Naxxxxxma, Ayako Soxxxxbo, male, 1
 Eleanor Oyxma, NA, NA, female, 1
 Sharon Naxxxxxma, Jason Naxxxxxma, Eleanor Oyxma, female, 0
 Alyssa Dexxxon, David Dexxxon, Sharon Naxxxxxma, female, 0
 Kellianne Dexxxon, David Dexxxon, Sharon Naxxxxxma, female, 0
 Christopher Dexxxon, David Dexxxon, Sharon Naxxxxxma, male, 0
 David Dexxxon, NA, NA, male, 0")

## Links for married individuals with no children
links <- read_csv(col_names=TRUE, show_col_types=FALSE, file=
  "id1, id2
  Brian Kaxxxxra, Nancy Kaxxxxra
  Neil Naxxta, Debbie Kaxxxxra")

## Create a presentation table
gt(data) |>
 cols_hide(columns=c(sex, status)) |>
 sub_missing(missing_text = "") |>
 tab_source_note(source_note="Source: Kaxxxxra family data")
ID father mother
Herbert Kaxxxxra
Hideko Kaxxxxra
Brian Kaxxxxra Herbert Kaxxxxra Hideko Kaxxxxra
Nancy Kaxxxxra
Candy Kaxxxxra Herbert Kaxxxxra Hideko Kaxxxxra
Debbie Kaxxxxra Herbert Kaxxxxra Hideko Kaxxxxra
Neil Naxxta
Doreen Kaxxxxra Herbert Kaxxxxra Hideko Kaxxxxra
Ayako Soxxxxbo
Jinpachi Naxxxxxma
Colleen Kaxxxxra Herbert Kaxxxxra Hideko Kaxxxxra
Kevin Naxxxxxma Jason Naxxxxxma Eleanor Oyxma
Terry Naxxxxxma Jason Naxxxxxma Eleanor Oyxma
Cory Naxxxxxma Terry Naxxxxxma Colleen Kaxxxxra
Karen Naxxxxxma Terry Naxxxxxma Colleen Kaxxxxra
Jason Naxxxxxma Jinpachi Naxxxxxma Ayako Soxxxxbo
Sachiko Naxxxxxma Jinpachi Naxxxxxma Ayako Soxxxxbo
Jerry Naxxxxxma Jinpachi Naxxxxxma Ayako Soxxxxbo
Eleanor Oyxma
Sharon Naxxxxxma Jason Naxxxxxma Eleanor Oyxma
Alyssa Dexxxon David Dexxxon Sharon Naxxxxxma
Kellianne Dexxxon David Dexxxon Sharon Naxxxxxma
Christopher Dexxxon David Dexxxon Sharon Naxxxxxma
David Dexxxon
Source: Kaxxxxra family data
Show the code
## Generate and plot the pedigree diagram
tiny_pedigree(data = data, links = links,
              symbolsize = 0.8,
              textsize = 0.6)