【问题标题】:Scatter Plot between 2 images Google Earth Engine两张图片之间的散点图 Google Earth Engine
【发布时间】:2019-07-01 00:51:27
【问题描述】:

我在 Google 地球引擎中有 2 张高分辨率图片。我想在这两个图像之间绘制一个散点图。但我收到了一些错误Missing required arguments to function seriesByRegion(): reducer。我不知道如何纠正这个问题(或者这是由于图像造成的)。

首先我导入了几何图形和我的图像:

var RZSC = ee.Image("users/chandrakant/Max_RZSC_Layer_Trail_3"),
    geometry = /* color: #d6cbbb */ee.Geometry.Polygon(
        [[[-81.375, -56.125],
          [-34.625, -56.125],
          [-34.625, 12.625],
          [-81.375, 12.625]]]);

然后我将图像可视化

var vizParams = {
  bands: ['b1'],
  min: 0.0,
  max: 1500.0,
  palette: ['blue', 'green', 'red']
};
Map.setCenter(6.746, 46.529, 10);
Map.addLayer(RZSC.clip(geometry), vizParams, 'Rootzone Storage Capacity');
Map.centerObject(RZSC);
print('RZSC Projection, crs, and crs_transform:', RZSC.projection());

可视化我的 MODIS 图像

var MODIStc = ee.ImageCollection('MODIS/051/MOD44B')
                  .filter(ee.Filter.date('2000-01-01', '2017-12-01')).mean();
var percentTreeCover = MODIStc.select('Percent_Tree_Cover');
var percentTreeCoverVis = {
  min: 0.0,
  max: 100.0,
  palette: ['bbe029', '0a9501', '074b03'],
};
Map.setCenter(6.746, 46.529, 2);
Map.addLayer(percentTreeCover.clip(geometry), percentTreeCoverVis, 'Percent Tree Cover');
print('MOD44B Projection, crs, and crs_transform:', percentTreeCover.projection());
\\Here I added Water Mask
var waterOcc = ee.Image("JRC/GSW1_0/GlobalSurfaceWater").select('occurrence'),
    jrc_data0 = ee.Image("JRC/GSW1_0/Metadata").select('total_obs').lte(0),
    waterOccFilled = waterOcc.unmask(0).max(jrc_data0),
    waterMask = waterOccFilled.lt(50);

在这里,我将图像 (RZSC) 重新投影到 250 m

\\Here I tried to increase the resolution from 25km to 250m    
var RZSC_250m = RZSC.resample('bilinear').reproject({
  crs: RZSC.projection().crs(),
  scale: 250
});
Map.addLayer(RZSC_250m.clip(geometry).updateMask(waterMask), vizParams, 'RZSC_250m');
print('RZSC_250m Projection, crs, and crs_transform:', RZSC_250m.projection());

在这里尝试了散点图

\\Tried to plot scatterplot here (I want just the basic scatter plot between 2 variables)
var chart = ui.Chart.image.seriesByRegion(RZSC, MODIStc, 
                ee.Reducer.mean(),250, 'nd').setChartType('ScatterChart');
print(chart);

我得到的错误: Error generating chart: Collection.map, argument 'collection': Invalid type. Expected: FeatureCollection. Actual: Image<[Percent_Tree_Cover]>.Collection.map, argument 'collection': Invalid type. Expected: FeatureCollection. Actual: Image<[Percent_Tree_Cover]>.

其他信息: 另外,我不知道为什么,但是MODIStcRZSC_250m 的尺寸不同。 对于 MODIStc:

bands: List (1 element)
0: "Percent_Tree_Cover", double ∈ [0, 255], EPSG:4326, 48x73 px
id: Percent_Tree_Cover
crs: EPSG:4326
crs_transform: [1,0,0,0,1,0]
data_type: double ∈ [0, 255]
dimensions: [48,73]
origin: [-82,-59]

对于 RZSC_250m:

bands: List (1 element)
0: "b1", float, EPSG:4326, 20818x28371 px
id: b1
crs: EPSG:4326
crs_transform: List (6 elements)
data_type: float
dimensions: [20818,28371]
origin: [-36235,-6107]

另外,当我尝试在 MODIStc 上使用 reproject 时,数据看起来平滑且奇怪(丢失了很多细节)。

【问题讨论】:

  • 你倒数第二行var chart = ui.Chart.image.seriesByRegion(RZSC, MODIStc_250m, ee.Reducer.mean(),250, 'nd').setChartType('ScatterChart');不符合GEE的格式ui.Chart.image.seriesByRegion(imageCollection, regions, reducer, band, scale, xProperty, seriesProperty)
  • @Kevin。谢谢你的建议,但这次我完全忘记了 GEE 格式以及有很多方法的事实(我不确定我的方法是否正确)。我最近开始使用谷歌地球引擎,比如 4 天前,所以多一点上下文将不胜感激。我找不到一些对我有用的例子或文献。
  • 我试图用更多细节来改进这个问题。也许这会有所帮助。

标签: scatter-plot google-earth-engine


【解决方案1】:

如果我理解正确,您想要的是一个散点图,其中一个轴代表RZSC 中的值,另一个轴代表MODIStc 中的值。此外,图表中的每个点都应在同一像素处保存一对值。

要实现这一点,您需要ui.Chart.feature.byFeature,而不是您使用的ui.Chart.image.seriesByRegion

要使用ui.Chart.feature.byFeature,您需要创建一个FeatureCollection,它有两个属性,一个保存RZSC 中所有像素的值,另一个保存MODIStc 中所有对应像素的值。下面是获取这个的示例代码:

var combined_image = RZSC.addBands(MODIStc)
var region = ee.Geometry.Rectangle(-83, -20, -31, 13)
var sample = combined_image.sampleRegions(region, null, 250)
var chart = ui.Chart.feature.byFeature(sample, 'b1', 'Percent_Tree_Cover')
    .setChartType('ScatterChart')
print(chart)

在上面的代码中,我根据您的示例图片组成了代表感兴趣区域(南美洲)的region 变量。您可能希望将其更改为您想要的任何内容(我猜可能是整个世界)。

此外,如果 GEE 引发任何内存错误(例如,“收集超过 5000 个元素后中止收集查询”或'超出用户内存限制'​​)

希望这会有所帮助。

【讨论】:

  • 谢谢凯文。你的代码对我来说很重要。我遇到的唯一问题是“累积超过 5000 个元素后集合查询中止”或“超出用户内存限制”,如您所料。但这就是谷歌地球引擎的局限性。我很想听听一些替代方案(如果你知道的话,同时将比例保持在 250-1000),因为将整个地图缩小 > 1000 会显着阻碍结果。
  • @Ep1c1aN:保持首选比例并保持大面积感兴趣区域的解决方法是将结果导出到驱动器而不是在 GEE 平台中绘图。例如,Export.table.toDrive(sample) 会将sample 的数据导出到 csv 文件(图像也可以这样做)。然后,您可以在 Excel 等中绘制散点图。 GEE 没有(或有更高的)出口限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多