knitr::opts_chunk$set(cache = TRUE, dev = c("png", "pdf"))
library(eucs)
library(ggplot2)
library(sp)
library(viridis)
which_match <- function(pattern, string, invert = FALSE) {
pattern <- as.character(pattern)
ans <- vapply(pattern, function(pattern) any(grepl(pattern, string)), NA)
if (invert) ans <- !ans
names(which(ans))
}
Altitudes of the trait samples that have been collected so far.
with(
traits_southeast,
hist(
altitude_m, breaks = seq(0, 1800, 50), col = "grey", border = NA,
main = "", xlab = "Altitude (m.a.s.l.)", panel.first = grid(),
ylab = "Number of samples", las = 1
)
)
box(bty = "l")

Map of trait sample collections.
ggplot() +
geom_path(aes(long, lat, group = group), map_southeast) +
geom_point(
aes(longitude_gda94, latitude_gda94, col = altitude_m),
traits_southeast, size = 2, alpha = .1
) +
scale_color_viridis() +
xlab("Longitude") +
ylab("Latitude")

List of taxa collected.
(taxa_sampled <- do.call(
merge,
c(
mapply(
function(x, y) {
df <- as.data.frame(xtabs(~taxon, x), responseName = y)
df <- df[order(df[[y]], decreasing = TRUE), ]
},
list(
summarise_traits_by(traits_southeast, tree, taxon),
traits_southeast
),
c("trees", "samples"),
SIMPLIFY = FALSE
),
sort = FALSE
)
))
List of taxa available, but so far not sampled.
(taxa_unsampled <- data.frame(
taxon = which_match(colnames(wide_southeast[-1:-6]), taxa_sampled$taxon, TRUE)
))
Plot of unsampled taxa.
local({
par(mfrow = c(6, 6), oma = c(1, 0, 0, 0), mar = c(1, 0, 1, 0))
for (i in taxa_unsampled$taxon) {
plot(map_southeast, xlim = c(144, 152), ylim = c(-40, -33))
points(
latitude_gda94 ~ longitude_gda94, data = wide_southeast,
subset = wide_southeast[, i], pch = 19, cex = .5, col = "salmon"
)
mtext(gsub("subsp.", "\nsubsp.", i), 1, .25, cex = .6)
}
})

IycgLS0tCiMnIHRpdGxlOiAiVGFyZ2V0IHRheGEgZm9yIHRoZSBTb3V0aC1lYXN0IEF1c3RyYWxpYSBldWNhbHlwdCB0cmFpdHMgZGF0YXNldCIKIycgYXV0aG9yOiAiV2lsbGlhbSBLLiBNb3JyaXMiCiMnIGRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKIycgb3V0cHV0OgojJyAgIHJtYXJrZG93bjo6aHRtbF9ub3RlYm9vazoKIycgICAgIGNvZGVfZm9sZGluZzogaGlkZQojJyAtLS0KCiMrIHNldHVwLCBtZXNzYWdlPUZBTFNFCmtuaXRyOjpvcHRzX2NodW5rJHNldChjYWNoZSA9IFRSVUUsIGRldiA9IGMoInBuZyIsICJwZGYiKSkKbGlicmFyeShldWNzKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc3ApCmxpYnJhcnkodmlyaWRpcykKCndoaWNoX21hdGNoIDwtIGZ1bmN0aW9uKHBhdHRlcm4sIHN0cmluZywgaW52ZXJ0ID0gRkFMU0UpIHsKICBwYXR0ZXJuIDwtIGFzLmNoYXJhY3RlcihwYXR0ZXJuKQogIGFucyA8LSB2YXBwbHkocGF0dGVybiwgZnVuY3Rpb24ocGF0dGVybikgYW55KGdyZXBsKHBhdHRlcm4sIHN0cmluZykpLCBOQSkKICBpZiAoaW52ZXJ0KSBhbnMgPC0gIWFucwogIG5hbWVzKHdoaWNoKGFucykpCn0KCiMnIEFsdGl0dWRlcyBvZiB0aGUgdHJhaXQgc2FtcGxlcyB0aGF0IGhhdmUgYmVlbiBjb2xsZWN0ZWQgc28gZmFyLgojKyB0cmFpdHNhbXBsZWFsdGl0dWRlcwp3aXRoKAogIHRyYWl0c19zb3V0aGVhc3QsCiAgaGlzdCgKICAgIGFsdGl0dWRlX20sIGJyZWFrcyA9IHNlcSgwLCAxODAwLCA1MCksIGNvbCA9ICJncmV5IiwgYm9yZGVyID0gTkEsCiAgICBtYWluID0gIiIsIHhsYWIgPSAiQWx0aXR1ZGUgKG0uYS5zLmwuKSIsIHBhbmVsLmZpcnN0ID0gZ3JpZCgpLAogICAgeWxhYiA9ICJOdW1iZXIgb2Ygc2FtcGxlcyIsIGxhcyA9IDEKICApCikKYm94KGJ0eSA9ICJsIikKCgojJyBNYXAgb2YgdHJhaXQgc2FtcGxlIGNvbGxlY3Rpb25zLgojKyB0cmFpdGNvbGxlY3Rpb25zLCBtZXNzYWdlPUZBTFNFCmdncGxvdCgpICsKICBnZW9tX3BhdGgoYWVzKGxvbmcsIGxhdCwgZ3JvdXAgPSBncm91cCksIG1hcF9zb3V0aGVhc3QpICsKICBnZW9tX3BvaW50KAogICAgYWVzKGxvbmdpdHVkZV9nZGE5NCwgbGF0aXR1ZGVfZ2RhOTQsIGNvbCA9IGFsdGl0dWRlX20pLAogICAgdHJhaXRzX3NvdXRoZWFzdCwgc2l6ZSA9IDIsIGFscGhhID0gLjEKICApICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKCkgKwogIHhsYWIoIkxvbmdpdHVkZSIpICsKICB5bGFiKCJMYXRpdHVkZSIpCgojJyBMaXN0IG9mIHRheGEgY29sbGVjdGVkLgojKyB0YXhhc2FtcGxlZAoodGF4YV9zYW1wbGVkIDwtIGRvLmNhbGwoCiAgbWVyZ2UsCiAgYygKICAgIG1hcHBseSgKICAgICAgZnVuY3Rpb24oeCwgeSkgewogICAgICAgIGRmIDwtIGFzLmRhdGEuZnJhbWUoeHRhYnMofnRheG9uLCB4KSwgcmVzcG9uc2VOYW1lID0geSkKICAgICAgICBkZiA8LSBkZltvcmRlcihkZltbeV1dLCBkZWNyZWFzaW5nID0gVFJVRSksIF0KICAgICAgfSwKICAgICAgbGlzdCgKICAgICAgICBzdW1tYXJpc2VfdHJhaXRzX2J5KHRyYWl0c19zb3V0aGVhc3QsIHRyZWUsIHRheG9uKSwKICAgICAgICB0cmFpdHNfc291dGhlYXN0CiAgICAgICksCiAgICAgIGMoInRyZWVzIiwgInNhbXBsZXMiKSwKICAgICAgU0lNUExJRlkgPSBGQUxTRQogICAgKSwKICAgIHNvcnQgPSBGQUxTRQogICkKKSkKCiMnIExpc3Qgb2YgdGF4YSBhdmFpbGFibGUsIGJ1dCBzbyBmYXIgbm90IHNhbXBsZWQuCiMrIHRheGFfdW5zYW1wbGVkCih0YXhhX3Vuc2FtcGxlZCA8LSBkYXRhLmZyYW1lKAogIHRheG9uID0gd2hpY2hfbWF0Y2goY29sbmFtZXMod2lkZV9zb3V0aGVhc3RbLTE6LTZdKSwgdGF4YV9zYW1wbGVkJHRheG9uLCBUUlVFKQopKQoKIycgUGxvdCBvZiB1bnNhbXBsZWQgdGF4YS4KIysgcGxvdHVuc2FtcGxlZApsb2NhbCh7CiAgcGFyKG1mcm93ID0gYyg2LCA2KSwgb21hID0gYygxLCAwLCAwLCAwKSwgbWFyID0gYygxLCAwLCAxLCAwKSkKICBmb3IgKGkgaW4gdGF4YV91bnNhbXBsZWQkdGF4b24pIHsKICAgIHBsb3QobWFwX3NvdXRoZWFzdCwgeGxpbSA9IGMoMTQ0LCAxNTIpLCB5bGltID0gYygtNDAsIC0zMykpCiAgICBwb2ludHMoCiAgICAgIGxhdGl0dWRlX2dkYTk0IH4gbG9uZ2l0dWRlX2dkYTk0LCBkYXRhID0gd2lkZV9zb3V0aGVhc3QsCiAgICAgIHN1YnNldCA9IHdpZGVfc291dGhlYXN0WywgaV0sIHBjaCA9IDE5LCBjZXggPSAuNSwgY29sID0gInNhbG1vbiIKICAgICkKICAgIG10ZXh0KGdzdWIoInN1YnNwLiIsICJcbnN1YnNwLiIsIGkpLCAxLCAuMjUsIGNleCA9IC42KQogIH0KfSkKCg==