[GIS] Spectral signatures chart in Google Earth Engine

chart;google-earth-enginegoogle-earth-engine-javascript-apilandsatremote sensing

I have been reading the documentation and some related questions online, but I cannot seem to make it work.
I use Google Earth Engine to access an old Landsat 5 image, and classify later on.

I want to plot the spectral signatures on a chart in earth engine, but I cannot seem to make it work.

This is the error code I keep getting:

Error generating chart: Data column(s) for axis #0 cannot be of type string

As far as I know, all the properties in the FeatureCollection are numeric. I don't know where the strings might come from.

Can anyone explain what is exactly going wrong?

The code:

// Query satellite image  26.996813, 14.395989
var aoi = ee.Geometry.Rectangle([14.38, 26.98, 14.49, 27.87]);
var collection = ee.ImageCollection('LANDSAT/LT05/C01/T1_SR').filterDate('1995-01-01', '1995-01-30').filterBounds(aoi).filterMetadata('IMAGE_QUALITY', 'equals', 9).select(['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7']);

//var rgbImage = collection.sort('CLOUD_COVER').first().select(['B3', 'B2', 'B1']);
var image_ = collection.sort('CLOUD_COVER').first();


// Load training data
var trainData = ee.FeatureCollection('users/jneujens/trainData');

// Property containing land cover labels
var label = 'classname';

// Get training from polygons on image
var training = image_.sampleRegions({
  collection: trainData,
  properties: ['classvalue'],
  scale: 30
});

print(training)


// Graph of spectral signatures training data
var options = {
  title: 'Landsat 5 surface reflectance spectral signatures',
  hAxis: {title: 'Wavelength (micrometers)'},
  vAxis: {title: 'Reflectance'},
  lineWidth: 1,
  pointSize: 4,
  series: {
    0: {color: 'grey'}, // impervious
    1: {color: 'green'}, // vegetation
    2: {color: 'red'}, // soil
}};

// Define a list of Landsat 8 wavelengths for X-axis labels.
var wavelengths = [0.47, 0.56, 0.66, 0.83, 1.56, 2.2, 11.4];

// Create the chart and set options.
var spectraChart = new ui.Chart.image.regions(
    image_, training, ee.Reducer.mean(), 30, 'classvalue', wavelengths)
        .setChartType('ScatterChart')
        .setOptions(options);

print(spectraChart)

Best Answer

Try providing trainData as the regions argument to ui.Chart.image.regions() instead of training. The .sampleRegions() step is unnecessary and it may be altering your original collection.

Related Question