In Google Earth Engine, it is simple to access and plot time series NDVI data from MOD13Q1 using the ui.Chart.image.doySeriesByRegion() function. However, this function plots the mean NDVI value in each tile within the region against the timestamp of the tile, not of the pixel. Because MODIS pixels have a composite DOY tag (band label "DayOfYear"), calculating the mean of the tile and plotting it against the first day of that tile's 16-day window seems inappropriate.

It would be better to plot NDVI at the pixel level against that pixel's associated DOY. Or, at least, plot the tile's mean NDVI against the tile's mean DOY.

Note: The issue I'm describing here is different from geo_dd's problem and I'm struggling to find any relevant material online to point me in a direction.

Any suggestions?

Reproducible code:

var ROI = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')
              .filterMetadata('country_co', 'equals', 'CV');

// Create clipping function
var clipper = function(image){
  return image.clip(ROI)

// Compile the data
var dataset = ee.ImageCollection('MODIS/006/MOD13Q1')
                  .filter(ee.Filter.date('2010-01-01', '2017-12-31'))
print("MOD13Q1 Image Collection", dataset);

// Define a chart with a a different series for each year in the region.
var series2WM = ui.Chart.image.doySeriesByYear(
    dataset, "NDVI", ROI, ee.Reducer.mean(), 500);

series2WM plot: series2WM

Notice that series2WM appears to plot data in 16-day intervals (and if you download the .csv file you can confirm this). This seems inappropriate for a data product that comes with pixel-specific date information.

edit: Fixed the interval period (oops)

edit2: To expand on the DOY issue: Plotting the mean VI Composite day of year against tile day of year reveals a closer look at the issue I'm trying to describe. For example, the mean date of VI composite for the window tagged as day 193 actually ranges between 197 and 203 depending on the year. This has obvious implications for extracting phenology metrics from the series.

Comparing the tile's mean composite DOY vs tile's tagged DOY:

var series3WM = ui.Chart.image.doySeriesByYear(
    dataset, "DayOfYear", ROI, ee.Reducer.mean(), 500);

CDOY vs tile DOY

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.