Wykresy tablicowe i listowe

Funkcja ui.Chart.array.values udostępnia metodę renderowania wykresów na podstawie obiektów ee.Array i ee.List.

Poniższe przykłady korzystają z danych tablic i list wygenerowanych przez redukcję pasm obrazu i metadanych obrazu za pomocą funkcji ee.Reducer.toList(). Pamiętaj, że dowolny zbiór list lub tablic o tej samej długości wzdłuż danej osi można przedstawić za pomocą funkcji ui.Chart.array.values.

Wykres punktowy ee.Array

Redukcja obszaru obrazu za pomocą funkcji ee.Reducer.toList() tworzy słownik list wartości pikseli, po jednym dla każdego pasma na danym obrazie. W tym przypadku służy do wyodrębniania z obrazu MODIS list wartości współczynników odbicia w zakresie czerwonym, podczerwieni dalekiej i podczerwieni dalekiej bliskiej dla pikseli pokrywających się z pokrytym lasem ekoregionem. Wartości odbicia w czerwieni są nanoszone na wykresie na osi X, a wartości NIR i SWIR na osi Y.

Zasób projects/google/charts_feature_example, użyty w tym przykładzie do wyznaczenia lasów w ekoregionie, został opracowany na potrzeby demonstracji. Jest to zbiór 3 wieloboków ekoregionów z właściwościami opisującymi normalne warunki klimatyczne.

Edytor kodu (JavaScript)

// Import the example feature collection and subset the forest feature.
var forest = ee.FeatureCollection('projects/google/charts_feature_example')
                 .filter(ee.Filter.eq('label', 'Forest'));

// Define a MODIS surface reflectance composite.
var modisSr = ee.ImageCollection('MODIS/006/MOD09A1')
                  .filter(ee.Filter.date('2018-06-01', '2018-09-01'))
                  .select('sur_refl_b0[0-7]')
                  .mean();

// Reduce MODIS reflectance bands by forest region; get a dictionary with
// band names as keys, pixel values as lists.
var pixelVals = modisSr.reduceRegion(
    {reducer: ee.Reducer.toList(), geometry: forest.geometry(), scale: 2000});

// Convert NIR and SWIR value lists to an array to be plotted along the y-axis.
var yValues = pixelVals.toArray(['sur_refl_b02', 'sur_refl_b06']);

// Get the red band value list; to be plotted along the x-axis.
var xValues = ee.List(pixelVals.get('sur_refl_b01'));

// Define the chart and print it to the console.
var chart = ui.Chart.array.values({array: yValues, axis: 1, xLabels: xValues})
                .setSeriesNames(['NIR', 'SWIR'])
                .setOptions({
                  title: 'Relationship Among Spectral Bands for Forest Pixels',
                  colors: ['1d6b99', 'cf513e'],
                  pointSize: 4,
                  dataOpacity: 0.4,
                  hAxis: {
                    'title': 'Red reflectance (x1e4)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    'title': 'Reflectance (x1e4)',
                    titleTextStyle: {italic: false, bold: true}
                  }
                });
print(chart);

Wykres punktowy ee.List

Za pomocą funkcji ui.Chart.array.values możesz narysować 2 obiekty listy. W tym przykładzie, który opiera się na poprzednim przykładzie, listy wartości osi X i Y, które reprezentują odbijalność w czerwieni i SWIR, są renderowane jako wykres punktowy.

Edytor kodu (JavaScript)

// Get Red and SWIR value lists; to be plotted along x and y axes, respectively.
// Note that the pixelVals object is defined in the previous code block.
var x = ee.List(pixelVals.get('sur_refl_b01'));
var y = ee.List(pixelVals.get('sur_refl_b06'));

// Define the chart and print it to the console.
var chart = ui.Chart.array.values({array: y, axis: 0, xLabels: x}).setOptions({
  title: 'Relationship Among Spectral Bands for Forest Pixels',
  colors: ['cf513e'],
  hAxis: {
    title: 'Red reflectance (x1e4)',
    titleTextStyle: {italic: false, bold: true}
  },
  vAxis: {
    title: 'SWIR reflectance (x1e4)',
    titleTextStyle: {italic: false, bold: true}
  },
  pointSize: 4,
  dataOpacity: 0.4,
  legend: {position: 'none'},
});
print(chart);

ee.List wykres linii przekroju

Zmniejszenie regionu obrazu o wartość ee.Reducer.toList() tworzy słownik list wartości pikseli, po jednym dla każdego pasma obrazu. Jeśli region jest linią, jak w tym przypadku, można wygenerować przekrój geograficzny, gdy pasma szerokości i długości geograficznej są uwzględnione jako pasma na obrazie. W tym przypadku listy wartości pikseli długości geograficznej i wysokości wzdłuż linii przekroju są wyodrębniane jako osobne zmienne i wyznaczane odpowiednio na osi X i Y.

Edytor kodu (JavaScript)

// Define a line across the Olympic Peninsula, USA.
var transect = ee.Geometry.LineString([[-122.8, 47.8], [-124.5, 47.8]]);

// Define a pixel coordinate image.
var latLonImg = ee.Image.pixelLonLat();

// Import a digital surface model and add latitude and longitude bands.
var elevImg =
    ee.Image('NASA/NASADEM_HGT/001').select('elevation').addBands(latLonImg);

// Reduce elevation and coordinate bands by transect line; get a dictionary with
// band names as keys, pixel values as lists.
var elevTransect = elevImg.reduceRegion({
  reducer: ee.Reducer.toList(),
  geometry: transect,
  scale: 1000,
});

// Get longitude and elevation value lists from the reduction dictionary.
var lon = ee.List(elevTransect.get('longitude'));
var elev = ee.List(elevTransect.get('elevation'));

// Sort the longitude and elevation values by ascending longitude.
var lonSort = lon.sort(lon);
var elevSort = elev.sort(lon);

// Define the chart and print it to the console.
var chart = ui.Chart.array.values({array: elevSort, axis: 0, xLabels: lonSort})
                .setOptions({
                  title: 'Elevation Profile Across Longitude',
                  hAxis: {
                    title: 'Longitude',
                    viewWindow: {min: -124.50, max: -122.8},
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    title: 'Elevation (m)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  colors: ['1d6b99'],
                  lineSize: 5,
                  pointSize: 0,
                  legend: {position: 'none'}
                });
print(chart);

Kliknij .setChartType('AreaChart'), aby dodać cieniowanie pod linią:

print(chart.setChartType('AreaChart'));

ee.Listwykres punktowy metadanych

Pole Collection zredukowane przez ee.Reducer.toList() tworzy słownik list wartości właściwości, po jednym dla każdej wybranej właściwości. W tym przypadku listy właściwości pokrycia chmur i geometrycznego RMSE są generowane z zestawu zdjęć Landsat 8 jako osobne zmienne. Zmienna pokrycia chmur jest wykreślana na osi X, a geometryczny RMSE – na osi Y.

Edytor kodu (JavaScript)

// Import a Landsat 8 collection and filter to a single path/row.
var col = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
              .filter(ee.Filter.expression('WRS_PATH ==  45 && WRS_ROW == 30'));

// Reduce image properties to a series of lists; one for each selected property.
var propVals = col.reduceColumns({
                    reducer: ee.Reducer.toList().repeat(2),
                    selectors: ['CLOUD_COVER', 'GEOMETRIC_RMSE_MODEL']
                  })
                   .get('list');

// Get selected image property value lists; to be plotted along x and y axes.
var x = ee.List(ee.List(propVals).get(0));
var y = ee.List(ee.List(propVals).get(1));

// Define the chart and print it to the console.
var chart = ui.Chart.array.values({array: y, axis: 0, xLabels: x})
                .setChartType('ScatterChart')
                .setOptions({
                  title: 'Landsat 8 Image Collection Metadata (045030)',
                  colors: ['96356f'],
                  hAxis: {
                    title: 'Cloud cover (%)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    title: 'Geometric RMSE (m)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  pointSize: 5,
                  dataOpacity: 0.6,
                  legend: {position: 'none'},
                });
print(chart);

ee.List zmapowana funkcja wykres punktowy i liniowy

Mapowanie funkcji na liście wartości x w celu obliczenia odpowiadającej listy wartości y. Tutaj funkcja sin() jest mapowana na liście wartości osi X, aby wygenerować odpowiadającą listę wartości osi Y. Podczas wyświetlania wykresu z listami x i y jest pokazywany przykładowy sygnał sinusoidalny.

Edytor kodu (JavaScript)

// Define a sequence from -2pi to +2pi in 50 increments.
var start = -2 * Math.PI;
var end = 2 * Math.PI;
var points = ee.List.sequence(start, end, null, 50);

// Evaluate the sin() function for each value in the points sequence.
var values = points.map(function(val) {
  return ee.Number(val).sin();
});

// Define the chart and print it to the console.
var chart = ui.Chart.array.values({array: values, axis: 0, xLabels: points})
                .setOptions({
                  title: 'Sine Function',
                  hAxis: {
                    title: 'radians',
                    viewWindowMode: 'maximized',
                    ticks: [
                      {v: start, f: '-2π'},
                      {v: -Math.PI, f: '-π'},
                      {v: 0, f: '0'},
                      {v: Math.PI, f: 'π'},
                      {v: end, f: '2π'}
                    ],
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    title: 'sin(x)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  colors: ['39a8a7'],
                  lineWidth: 3,
                  pointSize: 7,
                  viewWindow: {min: start, max: end},
                  legend: {position: 'none'}
                });
print(chart);