Source: https://atlasoflivingaustralia.github.io/ALA4R/index.html

Example 1: Name searching and taxonomic trees

Let’s say that we want to look at the taxonomic tree of penguins but we don’t know what the correct scientific name is. Start by searching for it:

sx <- search_fulltext("penguins")
sx$data %>% dplyr::select(name, rank, commonName, family)

We can see that penguins correspond to the family “SPHENISCIDAE”. Now we can download the taxonomic data (note that the search is case-sensitive):

tx <- taxinfo_download("rk_family:SPHENISCIDAE", fields=c("guid", "rk_genus", "scientificName", "rank"))
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
  
## keep only species and subspecies records
tx <- tx %>% dplyr::filter(rank %in% c("species","subspecies"))

We can make a taxonomic tree plot using the phytools package:

## as.phylo requires the taxonomic columns to be factors
tx <- tx %>% mutate_all(as.factor)

## create phylo object of Scientific.Name nested within Genus
ax <- as.phylo(~genus/scientificName, data=tx)

plotTree(ax, type="fan", fsize=0.7) ## plot it

We can also plot the tree with images of the different penguin species. We can first extract a species profile for each species identifier (guid) in our results:

s <- search_guids(tx$guid)

For each of those species profiles, download the thumbnail image and store it in our data cache:

imfiles <- sapply(s$thumbnailUrl, function(z) {
  ifelse(!is.na(z), ALA4R:::cached_get(z, type="binary_filename"), "")
})

And finally, plot the tree:

## plot tree without labels
plotTree(ax, type="fan", ftype="off")

## get the tree plot object
tr <- get("last_plot.phylo", envir = .PlotPhyloEnv)

## add each image
library(jpeg)
for (k in which(nchar(imfiles)>0))
        rasterImage(readJPEG(imfiles[k]), tr$xx[k]-1/10, tr$yy[k]-1/10, tr$xx[k]+1/10, tr$yy[k]+1/10)

A number of species may have no image (mostly, these are extinct species) and others are images of eggs rather than animals, but you get the idea.

LS0tCnRpdGxlOiAiQXRsYXMgb2YgTGl2aW5nIEF1c3RyYWxpYSAoQUxBKSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKU291cmNlOiBodHRwczovL2F0bGFzb2ZsaXZpbmdhdXN0cmFsaWEuZ2l0aHViLmlvL0FMQTRSL2luZGV4Lmh0bWwKCmBgYHtyIGluY2x1ZGU9RkFMU0V9Cm15cGFja2FnZXMgPC0gYygiQUxBNFIiLCAiYXBlIiwgImRwbHlyIiwgImdncGxvdDIiLCAianBlZyIsICJtYXBzIiwgIm1hcGRhdGEiLAogICAgICAgICAgICAgICAgIm1hcHRvb2xzIiwgInBoeXRvb2xzIiwgInRpZHlyIiwgInZlZ2FuIikKCmZvciAocCBpbiBteXBhY2thZ2VzKXsKICBpZighcmVxdWlyZShwLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKXsKICAgIGluc3RhbGwucGFja2FnZXMocCkKICAgIGxpYnJhcnkocCwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQogIH0KICB9CmBgYAoKIyMgRXhhbXBsZSAxOiBOYW1lIHNlYXJjaGluZyBhbmQgdGF4b25vbWljIHRyZWVzCgoKTGV0J3Mgc2F5IHRoYXQgd2Ugd2FudCB0byBsb29rIGF0IHRoZSB0YXhvbm9taWMgdHJlZSBvZiBwZW5ndWlucyBidXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBjb3JyZWN0IHNjaWVudGlmaWMgbmFtZSBpcy4gU3RhcnQgYnkgc2VhcmNoaW5nIGZvciBpdDoKCmBgYHtyfQpzeCA8LSBzZWFyY2hfZnVsbHRleHQoInBlbmd1aW5zIikKc3gkZGF0YSAlPiUgZHBseXI6OnNlbGVjdChuYW1lLCByYW5rLCBjb21tb25OYW1lLCBmYW1pbHkpCmBgYAoKV2UgY2FuIHNlZSB0aGF0IHBlbmd1aW5zIGNvcnJlc3BvbmQgdG8gdGhlIGZhbWlseSAiU1BIRU5JU0NJREFFIi4gTm93IHdlIGNhbiBkb3dubG9hZCB0aGUgdGF4b25vbWljIGRhdGEgKG5vdGUgdGhhdCB0aGUgc2VhcmNoIGlzIGNhc2Utc2Vuc2l0aXZlKToKCmBgYHtyfQp0eCA8LSB0YXhpbmZvX2Rvd25sb2FkKCJya19mYW1pbHk6U1BIRU5JU0NJREFFIiwgZmllbGRzPWMoImd1aWQiLCAicmtfZ2VudXMiLCAic2NpZW50aWZpY05hbWUiLCAicmFuayIpKQogIAojIyBrZWVwIG9ubHkgc3BlY2llcyBhbmQgc3Vic3BlY2llcyByZWNvcmRzCnR4IDwtIHR4ICU+JSBkcGx5cjo6ZmlsdGVyKHJhbmsgJWluJSBjKCJzcGVjaWVzIiwic3Vic3BlY2llcyIpKQpgYGAKCldlIGNhbiBtYWtlIGEgdGF4b25vbWljIHRyZWUgcGxvdCB1c2luZyB0aGUgYHBoeXRvb2xzYCBwYWNrYWdlOgoKYGBge3J9CiMjIGFzLnBoeWxvIHJlcXVpcmVzIHRoZSB0YXhvbm9taWMgY29sdW1ucyB0byBiZSBmYWN0b3JzCnR4IDwtIHR4ICU+JSBtdXRhdGVfYWxsKGFzLmZhY3RvcikKCiMjIGNyZWF0ZSBwaHlsbyBvYmplY3Qgb2YgU2NpZW50aWZpYy5OYW1lIG5lc3RlZCB3aXRoaW4gR2VudXMKYXggPC0gYXMucGh5bG8ofmdlbnVzL3NjaWVudGlmaWNOYW1lLCBkYXRhPXR4KQoKcGxvdFRyZWUoYXgsIHR5cGU9ImZhbiIsIGZzaXplPTAuNykgIyMgcGxvdCBpdApgYGAKCldlIGNhbiBhbHNvIHBsb3QgdGhlIHRyZWUgd2l0aCBpbWFnZXMgb2YgdGhlIGRpZmZlcmVudCBwZW5ndWluIHNwZWNpZXMuIFdlIGNhbiBmaXJzdCBleHRyYWN0IGEgc3BlY2llcyBwcm9maWxlIGZvciBlYWNoIHNwZWNpZXMgaWRlbnRpZmllciAoZ3VpZCkgaW4gb3VyIHJlc3VsdHM6CgpgYGB7cn0KcyA8LSBzZWFyY2hfZ3VpZHModHgkZ3VpZCkKYGBgCgpGb3IgZWFjaCBvZiB0aG9zZSBzcGVjaWVzIHByb2ZpbGVzLCBkb3dubG9hZCB0aGUgdGh1bWJuYWlsIGltYWdlIGFuZCBzdG9yZSBpdCBpbiBvdXIgZGF0YSBjYWNoZToKCmBgYHtyfQppbWZpbGVzIDwtIHNhcHBseShzJHRodW1ibmFpbFVybCwgZnVuY3Rpb24oeikgewogIGlmZWxzZSghaXMubmEoeiksIEFMQTRSOjo6Y2FjaGVkX2dldCh6LCB0eXBlPSJiaW5hcnlfZmlsZW5hbWUiKSwgIiIpCn0pCmBgYAoKQW5kIGZpbmFsbHksIHBsb3QgdGhlIHRyZWU6CgpgYGB7ciByZXN1bHRzPSJoaWRlIiwgZmlnLndpZHRoPTcuNSwgZmlnLmhlaWdodD03LjUsIGRldi5hcmdzPWlmICguUGxhdGZvcm0kT1MudHlwZT09InVuaXgiKSBsaXN0KHBuZz1saXN0KGNvbG9ydHlwZT0icHNldWRvLmN1YmUiKSkgZWxzZSBsaXN0KCl9CiMjIHBsb3QgdHJlZSB3aXRob3V0IGxhYmVscwpwbG90VHJlZShheCwgdHlwZT0iZmFuIiwgZnR5cGU9Im9mZiIpCgojIyBnZXQgdGhlIHRyZWUgcGxvdCBvYmplY3QKdHIgPC0gZ2V0KCJsYXN0X3Bsb3QucGh5bG8iLCBlbnZpciA9IC5QbG90UGh5bG9FbnYpCgojIyBhZGQgZWFjaCBpbWFnZQpsaWJyYXJ5KGpwZWcpCmZvciAoayBpbiB3aGljaChuY2hhcihpbWZpbGVzKT4wKSkKICAgICAgICByYXN0ZXJJbWFnZShyZWFkSlBFRyhpbWZpbGVzW2tdKSwgdHIkeHhba10tMS8xMCwgdHIkeXlba10tMS8xMCwgdHIkeHhba10rMS8xMCwgdHIkeXlba10rMS8xMCkKYGBgCgpBIG51bWJlciBvZiBzcGVjaWVzIG1heSBoYXZlIG5vIGltYWdlIChtb3N0bHksIHRoZXNlIGFyZSBleHRpbmN0IHNwZWNpZXMpIGFuZCBvdGhlcnMgYXJlIGltYWdlcyBvZiBlZ2dzIHJhdGhlciB0aGFuIGFuaW1hbHMsIGJ1dCB5b3UgZ2V0IHRoZSBpZGVhLgo=