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=