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.
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.
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.
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.
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);