Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Producing a moving time sequence in raster

Tags:

r

raster

I have a raster that looks like this:

library(raster)

# Create data
set.seed(123)
r <- raster(ncols=10, nrows=10)
r[] <- sample(10:360, ncell(r),replace = T)
crs(r) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
projection(r)
plot(r)

enter image description here

For each grid, the raster contains a day of the year as values. I am looking for a method that generates a map (animation maybe) which goes from day 1 to day 365 and when the map reaches the day which matches with the day of a grid, the grid should turn green.

I am sorry but I cannot produce what I have tried since I have no clue whether such thing is possible in R.

Thank you

EDIT

One way I could think of is run a loop like this:

for(i in 2:365){

    breakpoints <- c(1,i,365)
    colors <- c("green4","white")
    plot(r, breaks = breakpoints,col=colors)
}

Save the ouptut of each loop as .png and then develop a .gif image of it

like image 472
89_Simple Avatar asked Apr 09 '18 13:04

89_Simple


1 Answers

Using a loop, you can reclassify your raster into a binary raster (0 if lower or equal to the day, 1 if higher). Then, you can use the animation package to create the gif.

library(animation)
ani.options(interval=.05)

saveGIF({
  for (i in 1:365){
    m <- c(1, i, 0,  i, 365, 1)
    rclmat <- matrix(m, ncol=3, byrow=TRUE)
    rc <- reclassify(r, rclmat)

    plot(rc, col=c("green3", "white"), legend=FALSE, main = paste("Day", i))
  }
}) 

Demo (200 days)

enter image description here

like image 112
DJack Avatar answered Oct 06 '22 01:10

DJack