Setup

library(try)
library(dplyr)
library(ggplot2)

Filter tag 000012.

# Fix wrong names
vft <- rename(sinharaja::sinh_vft , x = QX, y = QY)

tag_000012 <- filter(vft, grepl("000012", Tag))
select(tag_000012, QuadratName, Tag, CensusID, Status, DBH)

In the table above, notice that the Status of last census is dead. map_tag() currently plots the status of the last census:

map_tag(tag_000012)
#> $`0000_1`

Now, map_tag() shows a snapshot of the latest status of the plot. I believe this is more useful than showing the entire history of each stem – which not only may confuse the field workers but also will consume much more time to plot.

If map_tag() plotted the status history ofeach stem, each stem will show multiple tags, and multiple overlapping poins of different shapes – each shape representing one historical status. This is what it would look like:

tag_000012 %>% 
  ggplot(aes(x, y)) + 
    geom_point(aes(shape = Status), size = 5) +
    scale_shape_manual(values = c(1, 6)) +
    ggrepel::geom_text_repel(aes(label = paste(Tag, Status, sep = "_"))) +
    theme_minimal()

If this is messy with just one tag, imagine what it’ll look like with all tags! What do you think?

LS0tDQp0aXRsZTogIk1hcCBUYWcgMDAwMDEyIg0KYXV0aG9yOiAibWF1cm9sZXBvcmVAZ21haWwuY29tIg0KZGF0ZTogIjIwMTctMTEtMjkiDQpvdXRwdXQ6DQogIHJtYXJrZG93bjo6aHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDYNCiAgICB0aGVtZTogdW5pdGVkDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQpzZXQuc2VlZCgxMDE0KQ0Kb3B0aW9ucyhkaWdpdHMgPSAzKQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGVjaG8gPSBUUlVFLA0KICBjb21tZW50ID0gIiM+IiwNCiAgY29sbGFwc2UgPSBUUlVFLA0KICBjYWNoZSA9IFRSVUUsDQogIG91dC53aWR0aCA9ICI3MCUiLA0KICBmaWcuYWxpZ24gPSAiY2VudGVyIiwNCiAgZmlnLndpZHRoID0gNiwNCiAgZmlnLmFzcCA9IDAuNjE4LCAgIyAxIC8gcGhpDQogIGZpZy5zaG93ID0gImhvbGQiDQopDQoNCm9wdGlvbnMoZHBseXIucHJpbnRfbWluID0gNiwgZHBseXIucHJpbnRfbWF4ID0gNikNCmBgYA0KDQpTZXR1cA0KDQpgYGB7cn0NCmxpYnJhcnkodHJ5KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmBgYA0KDQpGaWx0ZXIgdGFnIDAwMDAxMi4NCg0KYGBge3J9DQojIEZpeCB3cm9uZyBuYW1lcw0KdmZ0IDwtIHJlbmFtZShzaW5oYXJhamE6OnNpbmhfdmZ0ICwgeCA9IFFYLCB5ID0gUVkpDQoNCnRhZ18wMDAwMTIgPC0gZmlsdGVyKHZmdCwgZ3JlcGwoIjAwMDAxMiIsIFRhZykpDQpzZWxlY3QodGFnXzAwMDAxMiwgUXVhZHJhdE5hbWUsIFRhZywgQ2Vuc3VzSUQsIFN0YXR1cywgREJIKQ0KYGBgDQoNCkluIHRoZSB0YWJsZSBhYm92ZSwgbm90aWNlIHRoYXQgdGhlIFN0YXR1cyBvZiBsYXN0IGNlbnN1cyBpcyBkZWFkLiBgbWFwX3RhZygpYCBjdXJyZW50bHkgcGxvdHMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjZW5zdXM6DQoNCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmFzcD0xLjEsIG91dC53aWR0aD0iMTAwJSJ9DQptYXBfdGFnKHRhZ18wMDAwMTIpDQpgYGANCg0KTm93LCBgbWFwX3RhZygpYCBzaG93cyBhIHNuYXBzaG90IG9mIHRoZSBsYXRlc3Qgc3RhdHVzIG9mIHRoZSBwbG90LiBJIGJlbGlldmUgdGhpcyBpcyBtb3JlIHVzZWZ1bCB0aGFuIHNob3dpbmcgdGhlIGVudGlyZSBoaXN0b3J5IG9mIGVhY2ggc3RlbSAtLSB3aGljaCBub3Qgb25seSBtYXkgY29uZnVzZSB0aGUgZmllbGQgd29ya2VycyBidXQgYWxzbyB3aWxsIGNvbnN1bWUgbXVjaCBtb3JlIHRpbWUgdG8gcGxvdC4NCg0KSWYgYG1hcF90YWcoKWAgcGxvdHRlZCB0aGUgc3RhdHVzIGhpc3Rvcnkgb2ZlYWNoIHN0ZW0sIGVhY2ggc3RlbSB3aWxsIHNob3cgbXVsdGlwbGUgdGFncywgYW5kIG11bHRpcGxlIG92ZXJsYXBwaW5nIHBvaW5zIG9mIGRpZmZlcmVudCBzaGFwZXMgLS0gZWFjaCBzaGFwZSByZXByZXNlbnRpbmcgb25lIGhpc3RvcmljYWwgc3RhdHVzLiBUaGlzIGlzIHdoYXQgaXQgd291bGQgbG9vayBsaWtlOg0KDQpgYGB7cn0NCnRhZ18wMDAwMTIgJT4lIA0KICBnZ3Bsb3QoYWVzKHgsIHkpKSArIA0KICAgIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gU3RhdHVzKSwgc2l6ZSA9IDUpICsNCiAgICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxLCA2KSkgKw0KICAgIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBwYXN0ZShUYWcsIFN0YXR1cywgc2VwID0gIl8iKSkpICsNCiAgICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQpJZiB0aGlzIGlzIG1lc3N5IHdpdGgganVzdCBvbmUgdGFnLCBpbWFnaW5lIHdoYXQgaXQnbGwgbG9vayBsaWtlIHdpdGggYWxsIHRhZ3MhIFdoYXQgZG8geW91IHRoaW5rPw0K