图片 vs ggplot: 如何绘制颜色图例?

3

你好,我有一个矩阵37x73,它表示一个变量(moavg),网格间距为10x10度(-180 < LON < 180和-90 < LAT < 90)。 我可以使用image绘制它。

image(LON, LAT, moavg)

但我无法显示颜色条。我想知道是否有另一种函数(也许是ggplot)可以做到这一点,还允许我绘制颜色图例。
非常感谢。
2个回答

4
关于 这个答案 的问题:
针对这个问题的答案,需要绘制一个网格地图。
library(fields)
image.plot(lon, lat, moavg, col=heat.colors(8))

在此输入图片描述

提示:请在您的问题中提供一个可重现的示例。 这里是如何操作的

这段文字涉及到IT技术,建议使用更加通俗易懂的语言进行翻译。

4

为了绘制格网化的空间数据,rasterrasterVis 包也很有用。

以下是几个例子:

library(rasterVis) # this will also load the raster package

# Create a raster from a matrix of dummy data
m <- matrix(runif(36*18), ncol=36)
r <- raster(m)

# Set the extent of the object
extent(r) <- c(-180, 180, -90, 90)

# plot with raster
plot(r)

# plot with rasterVis
levelplot(r, margin=FALSE)

如果您的栅格数据存在于文件中(例如 .asc、.tif 等),那么您可以通过提供文件路径(例如 raster('C:/path/to/moavg.asc'))来加载它,您不需要在这种情况下设置范围,因为该文件应包含此元数据。
有关更多详细信息,请参见 ?raster 和 ?levelplot。
使用 raster 进行绘图: ![raster plot example](https://istack.dev59.com/scTgC.webp)
使用 levelplot 进行绘图: ![levelplot example](https://istack.dev59.com/LibVb.webp)
编辑: 为了回答评论中提出的扩展问题,以下是一种叠加多边形的方法:
library(maps)
levelplot(r, xlab='longitude', ylab='latitude', margin=FALSE,
            panel = function(x, y, ...) {
              panel.levelplot(x, y,  ...)
              mp <- map("world", plot = FALSE, fill=TRUE)
              lpolygon(mp$x, mp$y)
            })

levelplot with overlay


嗨,太好了!我该如何设置坐标轴名称并叠加世界地图?我尝试使用map(add=T)但不起作用。 - user3036416
嗨,如果根据网格场的间距来缩放地图呢?谢谢。 - user3036416
不太确定您的意思。如果在SO上找不到相关答案,可以将其发布为新问题。如果您想知道如何调整图例更改颜色的点,请使用“at”参数提供数字向量(如?lattice::levelplot中所述)。 - jbaums
嗨,我在http://stackoverflow.com/questions/21699809/scale-world-map-in-r上发布了它。 - user3036416

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接