It is possible to change the aesthetics of tokens based on the timestamp of the animation
For example, the number of days a ‘patient’ has been in the system
# Libraries ---------------------------------------------------------------
library(dplyr) ##pipes
library(tidyr) ##tidy data, partcularly the crossing() function
library(lubridate) ##date time manipulation
library(bupaR) ##buisness process analytics
library(processanimateR) ##animates process
# Create performance time flags ------------------------------------------------
<- data.frame(value = c(0,2,4,8,16)) %>%
my_flags mutate(day = days(value)) #convert numeric value into days
This will change the colour of the token at 0, 2, 4, 8, and 16 days.
The crossing()
function joins the cases of ‘patients’ to ‘my_flags’ and creates all possible combinations.
# Create timestamps of flags ----------------------------------------------
<- patients %>%
my_timeflags %>%
cases crossing(my_flags) %>% ##similar to a SQL outer join
mutate(time = start_timestamp + day) %>%
filter(time <= complete_timestamp) %>%
select("case" = patient,time,value) ##must be case, time, value
#> Warning: `tbl_df()` was deprecated in dplyr 1.0.0.
#> Please use `tibble::as_tibble()` instead.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
The data for the token_scale()
function must have the column headings ‘case, time, value’.
Without the domain = my_flags$value
argument the flags follow alphabetic order (e.g. 0, 16, 2, 4, 8) rather than the numeric order we wants. See d3-legend for further information.
# Animate process ---------------------------------------------------------
%>%
patients animate_process(mode ="absolute",
jitter=10,
legend = "color",
mapping = token_aes(
color = token_scale(my_timeflags
scale = "ordinal"
, domain = my_flags$value
, range = rev(RColorBrewer::brewer.pal(5,"Spectral"))
, )))
The colors can be modified through the range
argument. In this case the scale is reversed with rev()
to go from blue to red. See RColorBrewer::brewer.pal.info
for all options:
Acknowledgement
Thanks to Dominic Rowney for this nice example of advanced processanimateR usage. The original example code can be found here.