- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
摘要
如何将R raster::plot
的显示限制为Raster *对象的边界?为什么我问:
我是R初学者,必须
将未投影的(经纬度)全局空间数据从ASCII转换为netCDF(已解决)
“重新定义”它:即,将数据限制在一个区域中,对其进行投影,然后将其缩小(减小网格单元的大小)(大部分已解决)
不幸的是,在科学工作中,主要是QA数据转换,例如通过视觉检查进行的转换。上面的步骤1看起来不错。但是尽管第2步现在看起来要好得多,但我确实只想绘制重新定义的extents
的边界(或RasterLayer
)。我在公共git存储库(here)中有由bash脚本驱动的R代码,该库执行转换步骤,并绘制转换后的输出apparently correctly。但是,我用raster::plot
绘制重新网格的输出的尝试不太正确(请参见输出here的前三页)。
怎么修?
细节
背景
我需要获取一些数据(全球海洋排放清单(EI)),并将其与其他数据(主要是其他EI)结合起来,然后输入到模型中。该模型想要消耗netCDF,并且希望该netCDF在比连续美国(CONUS)稍大的空间域上使用。该图像的边界是域的边界。 (请注意,该域的一部分,但只有一部分是海洋的。)该模型还希望netCDF以某种方式投影(LCC的分辨率为12 km)。我将其视为2个独立的问题:
将全局EI从其本机ASCII格式转换为netCDF
将netCDF从全局/未投影“缩减”到缩小的(更精细的分辨率)投影子域。
我正在尝试使用我在this public git repository处存档的代码来解决这些问题。如果克隆该git repo,然后按照“第一个示例” in the README所述配置/运行bash驱动程序GEIA_to_netCDF.sh
(并假定已正确配置R,尤其是使用packages = raster
,ncdf4
)它将输出netCDF并绘制(使用fields::image.plot
)输出到PDF的图,该图应如下所示:。输出数据的分配似乎正确,因此问题1似乎已解决。
问题
解决问题2(又称“第二个示例” in the README)似乎需要R package = raster
。我的bash驱动程序regrid_GEIA_netCDF.sh
调用regrid.global.to.AQMEII.r
(均为in repository),该命令运行无误,并显示其输出的PDF。 GEIA_N2O_oceanic_regrid.pdf
包含4页,对应于regrid.global.to.AQMEII.r
末尾的4个代码块。这里只有前3页有用(第4页尝试使用fields::image.plot
并有更大的问题)。
Page = 1/4的结果来自简单的raster::plot
重新生成的输出,加上来自wrld_simpl
的CONUS地图的投影版本:
plot(out.raster)
plot(map.us.proj, add=TRUE)
raster::plot
显示的图像仅显示其参数中指定的
RasterLayer
范围吗?
raster::plot
显示的内容多于其
RasterLayer
的范围),如何使
raster::plot
仅显示该
RasterLayer
的范围?
regrid.global.to.AQMEII.r
(
here)中进行重新网格化的代码似乎获得了正确的输出:
out.crs <- '+proj=lcc +lat_1=33 +lat_2=45 +lat_0=40 +lon_0=-97 +x_0=-2556000 +y_0=-1728000'
out.raster <-
projectRaster(
from=in.raster, to=template.raster, method='bilinear', crs=out.crs,
overwrite=TRUE, progress='window', format='CDF',
# args from writeRaster
NAflag=-999.0, # match emi_n2o:missing_value,_FillValue (TODO: copy)
varname=data.var.name,
varunit='ton N2O-N/yr',
longname='N2O emissions',
xname='COL',
yname='ROW',
filename=out.fp)
out.raster
# made with CRS
#> class : RasterLayer
#> dimensions : 299, 459, 137241 (nrow, ncol, ncell)
#> resolution : 53369.55, 56883.69 (x, y)
#> extent : -14802449, 9694173, -6258782, 10749443 (xmin, xmax, ymin, ymax)
# ??? why still proj=longlat ???
#> coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
#> data source : /home/rtd/code/R/GEIA_to_netCDF/GEIA_N2O_oceanic_regrid.nc
#> names : N2O.emissions
#> zvar : emi_n2o
out.raster
)在CRS中显示为lon:我不确定为什么这样做,或者不确定
out.raster
在范围上是全局的。
extents
,即
plot(out.raster, ext=template.raster)
plot(map.us.proj, add=TRUE)
raster::crop
绑定重新定义的netCDF本身,然后使用与绑定重新定义的相同的
RasterLayer
对象(
template.raster
)进行绘制,然后再进行绘制:
template.raster.extent <- extent(template.raster)
out.raster.crop <-
# overwrite the uncropped file
crop(out.raster, template.raster.extent, filename=out.fp, overwrite=TRUE)
...
plot(out.raster.crop)
plot(map.us.proj, add=TRUE)
fields::image.plot
生成的,除非另有说明,否则该问题有一个不同的问题,描述为
here,除非StackOverflow重击了该链接。)
最佳答案
摘要
我的问题
How to limit display of an R `raster::plot` to the bounds of a `Raster*` object?
extent
数据对象(即图的数据源)的边界(或
Raster*
)
Extent
上设置分辨率;至少对我而言
raster::plot
映射仍然存在一个较小的边界问题;至少相对于我在
fields::image.plot
中使用的地图
extent
对象的
Raster*
?因为一旦我正确设置了要绘制的对象的范围,
raster::plot
问题就基本消失了。 (有一个小例外-见下文。)这可能是主要
raster
开发人员Robert J. Hijmans试图用
this post传达的内容,但是如果是这样,我当时并没有意识到。
M3
,这对于处理CMAQ和WRF输入和输出的数据很有用。这些建议是
project.lonlat.to.M3
进行重新网格化任务。
+ellps=WGS84
设置CRS。 (请参见
this repository中,特别是
regrid.global.to.AQMEII.r
中带有注释的R。)因此,我决定对此进行研究。
get.proj.info.M3
,它不仅从模板文件返回球形的PROJ.4字符串,而且还返回了我认为我需要提供的虚假的东西和北边的字符串:
# use package=M3 to get CRS from template file
out.crs <- get.proj.info.M3(template.in.fp)
cat(sprintf('out.crs=%s\n', out.crs)) # debugging
# out.crs=+proj=lcc +lat_1=33 +lat_2=45 +lat_0=40 +lon_0=-97 +a=6370000 +b=6370000
get.grid.info.M3
,可以稍作努力,返回模板文件的范围/范围:
extents.info <- get.grid.info.M3(template.in.fp)
extents.xmin <- extents.info$x.orig
extents.xmax <- max(
get.coord.for.dimension(
file=template.in.fp, dimension="col", position="upper", units="m")$coords)
extents.ymin <- extents.info$y.orig
extents.ymax <- max(
get.coord.for.dimension(
file=template.in.fp, dimension="row", position="upper", units="m")$coords)
template.extents <-
extent(extents.xmin, extents.xmax, extents.ymin, extents.ymax)
Raster*
上设置这些界限
template.in.raster <- raster(template.in.fp, ...)
template.raster <- projectExtent(template.in.raster, crs=out.crs)
template.raster@extent <- template.extents
Raster*
out.raster <-
projectRaster(
# give a template with extents--fast, but gotta calculate extents
from=in.raster, to=template.raster, crs=out.crs,
# give a resolution instead of a template? no, that hangs
# from=in.raster, res=grid.res, crs=out.crs,
method='bilinear', overwrite=TRUE, format='CDF',
# args from writeRaster
NAflag=-999.0, # match emi_n2o:missing_value,_FillValue (TODO: copy)
varname=data.var.name,
varunit='ton N2O-N/yr',
longname='N2O emissions',
xname='COL',
yname='ROW',
filename=out.fp)
# above fails to set CRS, so
out.raster@crs <- CRS(out.crs)
raster::plot
map.us.unproj <- wrld_simpl[wrld_simpl$ISO3 %in% c('CAN', 'MEX', 'USA'),]
map.us.proj <-
spTransform(map.us.unproj, CRS(out.crs)) # projected
...
pdf(file=pdf.fp, width=5.5, height=4.25)
...
plot(out.raster, # remaining args from image.plot
main=title, sub=subtitle,
xlab='', ylab='', axes=F, col=colors(100),
axis.args=list(at=quantiles, labels=quantiles.formatted))
# add a projected CONUS map
plot(map.us.proj, add=TRUE)
fields::image.plot
作图时
# see code in
# https://github.com/TomRoche/GEIA_to_netCDF/blob/master/plotLayersForTimestep.r
plot.raster(
raster=out.raster,
title=title,
subtitle=subtitle,
q.vec=probabilities.vec,
colors,
map.cmaq
)
fields::image.plot
进行显示。
关于r - 如何设置raster::plot的显示范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13005181/
我需要删除R包“ raster”中图形周围的框框,但无法弄清楚应该更改哪个参数。示例如下: library(raster) r <- raster(nrows=10, ncols=10) r <- s
我有一个来自 LiDAR las 文件的大点 shapefile(xyz,大约 65,000 个点),我正在尝试使用 gdal_grid 将其插值到网格上: gdal_grid -ot Float64
require(raster) ## Function to aggregate fun.patch = 0.9 * length(x)) { return(as.vector(which.m
require(raster) ## Function to aggregate fun.patch = 0.9 * length(x)) { return(as.vector(which.m
亲爱的人群 问题 我尝试使用软件包 nfc、pgirmess、SpatialPack 和 spdep 计算空间相关图。但是,我很难定义距离的起点和终点。我只对较小距离的空间自相关感兴趣,但对较小的 b
我一直在使用raster包中的extract函数,使用shapefile定义的区域从光栅文件中提取数据。但是,我对该过程现在所需的内存量存在问题。我确实有大量 shapefile(~1000)。光栅文
这是完整的错误消息: C:\Project Files\Good\src\views\RasterView.as(26): col: 39 Error: Type was not found or w
使用 batik 1.7 版本的 batik-rasterizer.jar,我想知道如何正确调用 jar。 java -jar batik-rasterizer-1.7.jar -m image/pn
我正在使用 Paper.js 进行一些 Canvas 绘图。我正在尝试根据 Canvas 大小调整栅格的大小和位置,但我的代码无法正常工作。 var canvas = document.getElem
getPixels() 中返回的内容?我在文档中没有看到任何信息。颜色数据如何表示?它是如何布局的,按行还是按列? 最佳答案 数据表示:整红绿色蓝色整数阿尔法 关于java - Raster.getP
我正在尝试安装包“Raster”,但出现包“raster”的错误安装具有非零退出状态。 我在其他网站看过,没有成功提前谢谢你 我在下面详细说明过程和错误。 install.packages("rast
我编写了将像素数据复制到整数数组的图像处理代码,如下所示: void processImage(BufferedImage source) { WritableRaster raster =
基本上是标题。我知道您可以使用 rast() 读取栅格文件夹,但我只想堆叠两个单独读取的栅格。谢谢 最佳答案 请注意,使用 raster::stack,您可以在多个参数 (stack(x1,x2,x3
正如问题所说,我正在尝试将多层 terra 栅格转换为 rasterStack 对象,以便我可以将其与另一个包(biomod2),仅接受较旧的栅格对象。 有没有有效的方法可以做到这一点?我唯一的其他选
这个问题已经有答案了: What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it? (25 个回答)
这里我尝试用最快的方法将 3 个矩阵(R、G 和 B)保存到 BufferedImage 中。 我在 StackExchange 上找到了这个方法,但它对我不起作用,因为它以灰度颜色保存图像。 如果我
更新 向导先生的回答给出了像素完美的结果,但它仅适用于 Windows,并且会破坏剪贴板内容。我的答案应该适用于任何平台,但不太精确:例如它省略了输入/输出标签。它确实允许设置光栅化宽度。 这个问题是
我正在尝试通过将栅格应用于 CALayer 来执行快速而肮脏的“模糊”。 CA 文档说 shouldRasterize 是可动画的,但是我没有得到任何动画。代码如下: CABasicAnimatio
我如何打开 .png 和 .tab 格式的栅格文件(使用 MapInfo 制作)并在 QGIS 中保留地理引用格式。非常感谢 最佳答案 您可以使用Georeferencer 工具,但您必须先在插件中激
在土壤制图的框架中,我需要对不确定数量的栅格求和。我尝试使用 'raster' 包和 'do.call' 函数来做到这一点。但是,如果 'sum' 函数可以对许多栅格求和,则使用 do.call 执行
我是一名优秀的程序员,十分优秀!