Using BFAST to show breakpoints

292 Views Asked by At

I am currently working with bfastSpatial, I am attempting to plot breakpoint values as a year colour based legend. I am aware of changeMonth function for plotting monthly based breakpoints (http://www.loicdutrieux.net/bfastSpatial/) however, I am attempting to achieve a similar outcome as in Morrison et al. (2019) https://www.mdpi.com/2072-4292/10/7/1075 Any assistance would be appreciated. enter image description here

1

There are 1 best solutions below

0
On

If you want to round the breakpoint dates to integer years, you can use floor, as the dates are in decimal years. Next, to make a similar plot as the one you showed, you can use the tmap package. Since you did not attach any data to the OP, I used the tura data included in the bfastSpatial package.

library(bfastSpatial)
library(tmap)

# Load tura data
data(tura)
# Perform bfast analysis
bfm <- bfmSpatial(tura, start=c(2009, 1), order=1)

# Extract the first band (breakpoints)
change <- bfm[[1]]

# As breakpoints dates are in year decimals,
# you can use floor to round them to lowest integer
change <- floor(change)

# Set shape as change, the object to plot
tm_shape(change) +
  # Plot it as raster and set the palette, number of categories,
  # style (categorical) and title of the legend.
  tm_raster(palette = "Spectral",
            n = 5,
            style = "cat",
            title = "Year") +
  # Set the legend's position and eliminate the comma used by default for
  # separating thousands values. Add background color and transparency
  tm_layout(legend.position = c("right", "bottom"),
            legend.format=list(fun=function(x) formatC(x, digits=0, format="d")),
            legend.bg.color = "white",
            legend.bg.alpha = 0.7) +
  # Add scale bar, set position and other arguments
  tm_scale_bar(breaks = c(0,0.5,1),
               position = c("right", "top"),
               bg.color = "white",
               bg.alpha = 0.7) +
  # Add north arrow with additional parameters
  tm_compass(type = "arrow", 
             position = c("left", "top"),
             bg.color = "white",
             bg.alpha = 0.7) 

The obtained plot: Breakpoints map