Gráficos de imagem

O módulo ui.Chart.image contém um conjunto de funções para reduzir objetos Image por região e renderizar gráficos com base nos resultados. A escolha da função determina a disposição dos dados no gráfico, ou seja, o que define os valores dos eixos x e y e o que define a série. Use as descrições e exemplos de função a seguir para determinar a melhor função e o tipo de gráfico para seu objetivo.

Funções de gráfico

Use os diagramas de plotagem a seguir como um guia visual para entender como cada função organiza os resultados da redução de região de imagem em um gráfico, ou seja, quais elementos definem valores x, valores y e séries.

ui.Chart.image.byRegion

As regiões de redução são representadas ao longo do eixo x, marcadas pelos valores de uma propriedade de elemento selecionada. As séries são definidas por nomes de faixas cujos resultados de redução de região são plotados ao longo do eixo y.

ui.Chart.image.regions

As faixas são plotadas ao longo do eixo x. As séries são identificadas pelos valores de uma propriedade de elemento. A redução da região definida pela geometria dos respectivos elementos da série é representada ao longo do eixo y.

ui.Chart.image.byClass

As faixas de dados são plotadas ao longo do eixo x. As séries são representadas por valores exclusivos em uma faixa de classe. A posição do eixo Y é definida pelos resultados de redução de região para pixels que compõem cada série.

ui.Chart.image.histogram

Histograma de frequência para valores das bandas selecionadas.

  • Eixo X: buckets de histograma para valores das faixas selecionadas
  • Eixo Y: frequência dos pixels qualificados para cada bucket do histograma

Exemplo

Os exemplos a seguir dependem de um FeatureCollection composto por três elementos de ecorregião que definem regiões para reduzir os dados de imagem. Os dados Image são valores normais de clima do PRISM, em que as bandas descrevem variáveis climáticas por mês, por exemplo, Precipitação em julho ou temperatura média em janeiro. Saiba como esse recurso foi criado.

ui.Chart.image.byRegion

Gráfico de colunas

Neste exemplo, as bandas de imagem que representam a temperatura média mensal são reduzidas à média entre os pixels que se cruzam em cada uma das três ecorregiões. Os resultados são plotados como colunas por mês por ecorregião, em que a altura da coluna indica a temperatura média mensal.

Editor de código (JavaScript)

// Import the example feature collection.
var ecoregions = ee.FeatureCollection('projects/google/charts_feature_example');

// Load PRISM climate normals image collection; convert images to bands.
var normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands();

// Define the chart and print it to the console.
var chart =
    ui.Chart.image
        .byRegion({
          image: normClim.select('[0-9][0-9]_tmean'),
          regions: ecoregions,
          reducer: ee.Reducer.mean(),
          scale: 500,
          xProperty: 'label'
        })
        .setSeriesNames([
          'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
          'Nov', 'Dec'
        ])
        .setChartType('ColumnChart')
        .setOptions({
          title: 'Average Monthly Temperature by Ecoregion',
          hAxis:
              {title: 'Ecoregion', titleTextStyle: {italic: false, bold: true}},
          vAxis: {
            title: 'Temperature (°C)',
            titleTextStyle: {italic: false, bold: true}
          },
          colors: [
            '604791', '1d6b99', '39a8a7', '0f8755', '76b349', 'f0af07',
            'e37d05', 'cf513e', '96356f', '724173', '9c4f97', '696969'
          ]
        });
print(chart);

Gráfico de barras

O gráfico de colunas anterior pode ser renderizado como um gráfico de barras mudando a entrada .setChartType() de 'ColumnChart' para 'BarChart'.

var chart =
    ui.Chart.image
        .byRegion({
          image: normClim.select('[0-9][0-9]_tmean'),
          regions: ecoregions,
          reducer: ee.Reducer.mean(),
          scale: 500,
          xProperty: 'label'
        })
        .setSeriesNames([
          'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
          'Nov', 'Dec'
        ])
        .setChartType('BarChart')
        .setOptions({
          title: 'Average Monthly Temperature by Ecoregion',
          hAxis: {
            title: 'Temperature (°C)',
            titleTextStyle: {italic: false, bold: true}
          },
          vAxis:
              {title: 'Ecoregion', titleTextStyle: {italic: false, bold: true}},
          colors: [
            '604791', '1d6b99', '39a8a7', '0f8755', '76b349', 'f0af07',
            'e37d05', 'cf513e', '96356f', '724173', '9c4f97', '696969'
          ]
        });

Gráfico de colunas empilhadas

A opção de gráfico isStacked especifica se as colunas do gráfico são empilhadas ou não. Várias opções são fornecidas para a pilha. Os exemplos a seguir demonstram o uso das opções 'absolute' e 'relative'.

Absoluto

Um gráfico de barras empilhadas absoluto relaciona o total de uma variável numérica por incrementos de uma série de variáveis categóricas. Por exemplo, neste exemplo, a precipitação total é representada como o acúmulo de precipitação mensal ao longo de um ano, por ecorregião. Os totais mensais de precipitação são derivados de bandas de imagem, em que cada banda representa uma grade de precipitação total média de um determinado mês, reduzida à média dos pixels que se cruzam em cada uma das três ecorregiões. A opção de gráfico isStacked é definida como 'absolute' para formatar os resultados como valores absolutos.

Editor de código (JavaScript)

// Import the example feature collection.
var ecoregions = ee.FeatureCollection('projects/google/charts_feature_example');

// Load PRISM climate normals image collection; convert images to bands.
var normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands();

// Define the chart and print it to the console.
var chart =
    ui.Chart.image
        .byRegion({
          image: normClim.select('[0-9][0-9]_ppt'),
          regions: ecoregions,
          reducer: ee.Reducer.mean(),
          scale: 500,
          xProperty: 'label'
        })
        .setSeriesNames([
          'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
          'Nov', 'Dec'
        ])
        .setChartType('ColumnChart')
        .setOptions({
          title: 'Average Monthly Precipitation by Ecoregion',
          hAxis:
              {title: 'Ecoregion', titleTextStyle: {italic: false, bold: true}},
          vAxis: {
            title: 'Precipitation (mm)',
            titleTextStyle: {italic: false, bold: true}
          },
          colors: [
            '604791', '1d6b99', '39a8a7', '0f8755', '76b349', 'f0af07',
            'e37d05', 'cf513e', '96356f', '724173', '9c4f97', '696969'
          ],
          isStacked: 'absolute'
        });
print(chart);

Relativo

Converta o gráfico de barras empilhadas absoluto anterior em um gráfico de barras empilhadas relativo mudando a opção de gráfico isStacked de 'absolute' para 'relative'. Um gráfico de barras empilhadas relativo relaciona a proporção de séries de variáveis categóricas que contribuem com o total de uma variável numérica. Por exemplo, neste exemplo, a precipitação mensal é representada como uma proporção da precipitação total anual por ecorregião.

var chart =
    ui.Chart.image
        .byRegion({
          image: normClim.select('[0-9][0-9]_ppt'),
          regions: ecoregions,
          reducer: ee.Reducer.mean(),
          scale: 500,
          xProperty: 'label'
        })
        .setSeriesNames([
          'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
          'Nov', 'Dec'
        ])
        .setChartType('ColumnChart')
        .setOptions({
          title: 'Average Monthly Precipitation by Ecoregion',
          hAxis:
              {title: 'Ecoregion', titleTextStyle: {italic: false, bold: true}},
          vAxis: {
            title: 'Precipitation (mm)',
            titleTextStyle: {italic: false, bold: true}
          },
          colors: [
            '604791', '1d6b99', '39a8a7', '0f8755', '76b349', 'f0af07',
            'e37d05', 'cf513e', '96356f', '724173', '9c4f97', '696969'
          ],
          isStacked: 'relative'
        });

Gráfico de dispersão

As temperaturas médias de janeiro e julho para uma amostra aleatória de locais no estado do Colorado são representadas como uma função da elevação. Um DEM é amostrado usando a função sample, que retorna um FeatureCollection com uma geometria e uma propriedade de elevação. O FeatureCollection resultante é usado como o argumento para o parâmetro regions da função ui.Chart.image.byRegion. As séries são definidas por bandas selecionadas da imagem de valores normais do clima de entrada.

Editor de código (JavaScript)

// Load SRTM elevation data.
var elev = ee.Image('CGIAR/SRTM90_V4').select('elevation');

// Subset Colorado from the TIGER States feature collection.
var colorado = ee.FeatureCollection('TIGER/2018/States')
                   .filter(ee.Filter.eq('NAME', 'Colorado'));

// Draw a random sample of elevation points from within Colorado.
var samp = elev.sample(
    {region: colorado, scale: 30, numPixels: 500, geometries: true});

// Load PRISM climate normals image collection; convert images to bands.
var normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands();

// Define the chart and print it to the console.
var chart = ui.Chart.image
                .byRegion({
                  image: normClim.select(['01_tmean', '07_tmean']),
                  regions: samp,
                  reducer: ee.Reducer.mean(),
                  scale: 500,
                  xProperty: 'elevation'
                })
                .setSeriesNames(['Jan', 'Jul'])
                .setChartType('ScatterChart')
                .setOptions({
                  title: 'Average Monthly Colorado Temperature by Elevation',
                  hAxis: {
                    title: 'Elevation (m)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    title: 'Temperature (°C)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  pointSize: 4,
                  dataOpacity: 0.6,
                  colors: ['1d6b99', 'cf513e'],
                });
print(chart);

Gráfico de combinação

Para três ecorregiões em um ee.FeatureCollection, a temperatura média e a precipitação de junho são plotadas. Os resultados são derivados da redução de região de uma imagem em que cada faixa é uma grade de valores normais do clima que descreve a precipitação e a temperatura mensais. As faixas que representam a temperatura e a precipitação de junho são subconjuntos. Como a precipitação e a temperatura estão em unidades diferentes, dois eixos y são usados definindo as opções series e vAxes. Observe o uso da opção series.targetAxisIndex para definir qual variável é plotada no eixo y à direita e à esquerda. Símbolos específicos da série (pontos e colunas) são usados para distinguir com mais facilidade as duas variáveis como tendo unidades diferentes.

Editor de código (JavaScript)

// Import the example feature collection.
var ecoregions = ee.FeatureCollection('projects/google/charts_feature_example');

// Load PRISM climate normals image collection; convert images to bands.
var normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands();

// Define the chart and print it to the console.
var chart =
    ui.Chart.image
        .byRegion({
          image: normClim.select(['06_tmean', '06_ppt']),
          regions: ecoregions,
          reducer: ee.Reducer.mean(),
          scale: 500,
          xProperty: 'label'
        })
        .setSeriesNames(['Precipitation', 'Temperature'])
        .setChartType('ColumnChart')
        .setOptions({
          title: 'Average June Temperature and Precipitation by Ecoregion',
          series: {
            0: {targetAxisIndex: 1, type: 'bar', color: '1d6b99'},
            1: {
              targetAxisIndex: 0,
              type: 'line',
              lineWidth: 0,
              pointSize: 10,
              color: 'e37d05'
            }
          },
          hAxis:
              {title: 'Ecoregion', titleTextStyle: {italic: false, bold: true}},
          vAxes: {
            0: {
              title: 'Temperature (°C)',
              baseline: 0,
              titleTextStyle: {italic: false, bold: true, color: 'e37d05'}
            },
            1: {
              title: 'Precipitation (mm)',
              titleTextStyle: {italic: false, bold: true, color: '1d6b99'}
            },
          },
          bar: {groupWidth: '40%'},
        });
print(chart);

ui.Chart.image.regions

Exemplo de configuração

A função ui.Chart.image.regions aceita uma lista que permite controlar o rótulo e a ordem dos nomes de faixas ao longo do eixo x atribuindo valores numéricos a eles. Os gráficos a seguir usam essa opção para definir os nomes das faixas como rótulos de mês e classificá-los em ordem cronológica para a precipitação mensal média.

Gráfico de colunas

Este gráfico mostra a precipitação média total por mês para três ecorregiões. Os resultados são derivados da redução de região de uma imagem em que cada faixa é uma grade de precipitação total média de um determinado mês. As bandas são plotadas ao longo do eixo x, e as regiões definem a série. Observe as operações do lado do cliente usadas para definir entradas para as opções de gráfico xLabels e ticks para organização personalizada do eixo x. As operações do cliente são necessárias porque as opções fornecidas para a função setOptions precisam ser objetos do lado do cliente. Consulte Cliente x servidor para entender a diferença. Para converter em um gráfico de barras, use 'BarChart' como a entrada .setChartType().

Editor de código (JavaScript)

// Import the example feature collection.
var ecoregions = ee.FeatureCollection('projects/google/charts_feature_example');

// Load PRISM climate normals image collection, convert images to bands, and
// subset precipitation bands.
var precip = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m')
                 .toBands()
                 .select('[0-9][0-9]_ppt');

// Define a dictionary that associates band names with values and labels.
var precipInfo = {
  '01_ppt': {v: 1, f: 'Jan'},
  '02_ppt': {v: 2, f: 'Feb'},
  '03_ppt': {v: 3, f: 'Mar'},
  '04_ppt': {v: 4, f: 'Apr'},
  '05_ppt': {v: 5, f: 'May'},
  '06_ppt': {v: 6, f: 'Jun'},
  '07_ppt': {v: 7, f: 'Jul'},
  '08_ppt': {v: 8, f: 'Aug'},
  '09_ppt': {v: 9, f: 'Sep'},
  '10_ppt': {v: 10, f: 'Oct'},
  '11_ppt': {v: 11, f: 'Nov'},
  '12_ppt': {v: 12, f: 'Dec'}
};

// Organize precipitation information into objects for defining x values and
// their tick labels. Note that chart options provided to the .setOptions()
// function must be client-side objects, which is why a client-side for
// loop is used to iteratively populate lists from the above dictionary.
var xPropVals = [];    // List to codify x-axis band names as values.
var xPropLabels = [];  // Holds dictionaries that label codified x-axis values.
for (var key in precipInfo) {
  xPropVals.push(precipInfo[key].v);
  xPropLabels.push(precipInfo[key]);
}

// Define the chart and print it to the console.
var chart = ui.Chart.image
                .regions({
                  image: precip,
                  regions: ecoregions,
                  reducer: ee.Reducer.mean(),
                  scale: 5e3,
                  seriesProperty: 'label',
                  xLabels: xPropVals
                })
                .setChartType('ColumnChart')
                .setOptions({
                  title: 'Average Ecoregion Precipitation by Month',
                  hAxis: {
                    title: 'Month',
                    titleTextStyle: {italic: false, bold: true},
                    ticks: xPropLabels
                  },
                  vAxis: {
                    title: 'Precipitation (mm)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  colors: ['f0af07', '0f8755', '76b349'],
                });
print(chart);

Gráfico de linhas

O gráfico de colunas anterior pode ser renderizado como um gráfico de linhas mudando a entrada .setChartType() de 'ColumnChart' para 'LineChart'.

var chart = ui.Chart.image
                .regions({
                  image: precip,
                  regions: ecoregions,
                  reducer: ee.Reducer.mean(),
                  scale: 500,
                  seriesProperty: 'label',
                  xLabels: xPropVals
                })
                .setChartType('LineChart')
                .setOptions({
                  title: 'Average Ecoregion Precipitation by Month',
                  hAxis: {
                    title: 'Month',
                    titleTextStyle: {italic: false, bold: true},
                    ticks: xPropLabels
                  },
                  vAxis: {
                    title: 'Precipitation (mm)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  colors: ['f0af07', '0f8755', '76b349'],
                  lineSize: 5
                });

Gráfico de área

O gráfico de colunas anterior pode ser renderizado como um gráfico de área mudando a entrada .setChartType() de 'ColumnChart' para 'AreaChart'.

var chart = ui.Chart.image
                .regions({
                  image: precip,
                  regions: ecoregions,
                  reducer: ee.Reducer.mean(),
                  scale: 500,
                  seriesProperty: 'label',
                  xLabels: xPropVals
                })
                .setChartType('AreaChart')
                .setOptions({
                  title: 'Average Ecoregion Precipitation by Month',
                  hAxis: {
                    title: 'Month',
                    titleTextStyle: {italic: false, bold: true},
                    ticks: xPropLabels
                  },
                  vAxis: {
                    title: 'Precipitation (mm)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  colors: ['f0af07', '0f8755', '76b349'],
                  lineSize: 5
                });

Gráfico de pizza

A precipitação mensal média é mostrada como uma proporção da precipitação anual total média de uma ecorregião florestal. As faixas de imagem que representam a precipitação mensal são subconjuntos de um conjunto de dados de condições climáticas normais e são reduzidas à média dos pixels que cruzam a ecorregião.

Editor de código (JavaScript)

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

// Load PRISM climate normals image collection, convert images to bands.
var normClim = ee.ImageCollection('OREGONSTATE/PRISM/Norm81m').toBands();

// Define x-axis labels to replace default band names.
var monthNames = [
  'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov',
  'Dec'
];

// Define the chart and print it to the console.
var chart = ui.Chart.image
                .regions({
                  image: normClim.select('[0-9][0-9]_ppt'),
                  regions: forest,
                  reducer: ee.Reducer.mean(),
                  scale: 5e3,
                  seriesProperty: 'label',
                  xLabels: monthNames
                })
                .setChartType('PieChart')
                .setOptions({
                  title: 'Average Monthly Precipitation for Forest Ecoregion',
                  colors: [
                    '604791', '1d6b99', '39a8a7', '0f8755', '76b349', 'f0af07',
                    'e37d05', 'cf513e', '96356f', '724173', '9c4f97', '696969'
                  ]
                });
print(chart);

Gráfico de rosca

Converta o exemplo de gráfico de pizza em um gráfico de anel definindo a opção de gráfico pieHole. Use 0,4 e 0,6 como valores iniciais.

var chart = ui.Chart.image
                .regions({
                  image: normClim.select('[0-9][0-9]_ppt'),
                  regions: forest,
                  reducer: ee.Reducer.mean(),
                  scale: 5e3,
                  seriesProperty: 'label',
                  xLabels: monthNames
                })
                .setChartType('PieChart')
                .setOptions({
                  title: 'Average Monthly Precipitation for Forest Ecoregion',
                  colors: [
                    '604791', '1d6b99', '39a8a7', '0f8755', '76b349', 'f0af07',
                    'e37d05', 'cf513e', '96356f', '724173', '9c4f97', '696969'
                  ],
                  pieHole: 0.4
                });

ui.Chart.image.byClass

Gráfico de linhas

A função ui.Chart.image.byClass exibe as estatísticas de valor de faixa para pixels em regiões classificadas de uma "faixa de classe". Neste exemplo, ele é usado para mostrar o perfil espectral de três ecorregiões. Os elementos de Ecorregião são rasterizados e adicionados como uma banda a uma imagem de refletância de superfície (SR) do MODIS. Para cada classe de ecorregião e banda de refletância, a média do pixel é calculada e plotada no eixo y. As comprimentos de onda centrais das bandas MODIS SR definem as marcas e os rótulos do eixo x. A opção de gráfico de linhas curveType está definida como 'function' para suavizar as linhas.

Editor de código (JavaScript)

// Import the example feature collection.
var ecoregions = ee.FeatureCollection('projects/google/charts_feature_example');

// Convert ecoregion feature collection to a classified image.
var regionsBand =
    ecoregions
        .reduceToImage({properties: ['value'], reducer: ee.Reducer.first()})
        .rename('class');

// 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();

// Reorder reflectance bands by ascending wavelength and
// add the classified ecoregions image as a band to the SR collection and
var modisSrClass = modisSr.select([2, 3, 0, 1, 4, 5, 6]).addBands(regionsBand);

// Define a list of MODIS SR wavelengths for x-axis labels.
var wavelengths = [469, 555, 655, 858, 1240, 1640, 2130];

// Define the chart and print it to the console.
var chart = ui.Chart.image
                .byClass({
                  image: modisSrClass,
                  classBand: 'class',
                  region: ecoregions,
                  reducer: ee.Reducer.mean(),
                  scale: 500,
                  classLabels: ['Desert', 'Forest', 'Grassland'],
                  xLabels: wavelengths
                })
                .setChartType('ScatterChart')
                .setOptions({
                  title: 'Ecoregion Spectral Signatures',
                  hAxis: {
                    title: 'Wavelength (nm)',
                    titleTextStyle: {italic: false, bold: true},
                    viewWindow: {min: wavelengths[0], max: wavelengths[6]}
                  },
                  vAxis: {
                    title: 'Reflectance (x1e4)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  colors: ['f0af07', '0f8755', '76b349'],
                  pointSize: 0,
                  lineSize: 5,
                  curveType: 'function'
                });
print(chart);

ui.Chart.image.histogram

Um histograma de valores de pixel em uma região ao redor de Salt Lake City, Utah, EUA, é mostrado para três bandas de refletância de superfície do MODIS.

Editor de código (JavaScript)

// 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_b01', 'sur_refl_b02', 'sur_refl_b06'])
                  .mean();

// Define a region to calculate histogram for.
var histRegion = ee.Geometry.Rectangle([-112.60, 40.60, -111.18, 41.22]);

// Define the chart and print it to the console.
var chart =
    ui.Chart.image.histogram({image: modisSr, region: histRegion, scale: 500})
        .setSeriesNames(['Red', 'NIR', 'SWIR'])
        .setOptions({
          title: 'MODIS SR Reflectance Histogram',
          hAxis: {
            title: 'Reflectance (x1e4)',
            titleTextStyle: {italic: false, bold: true},
          },
          vAxis:
              {title: 'Count', titleTextStyle: {italic: false, bold: true}},
          colors: ['cf513e', '1d6b99', 'f0af07']
        });
print(chart);