r - 使用 ggplot 绘制栅格因子值

标签 r ggplot2 raster

我在使用 ggplot2 绘制具有因子值的栅格时遇到问题。

library(ggplot2)
library(raster)

首先,加载栅格数据

f <- system.file("external/test.grd", package="raster")
r <- raster(f)

提取坐标和值

val <- getValues(r)
xy <- as.data.frame(xyFromCell(r,1:ncell(r)))
xy <- cbind(xy,val)

使用 geom_raster() 绘制网格。一切正常。

ggplot(xy, aes(x=x, y=y, fill=val)) + geom_raster() + coord_equal()

我没有连续栅格,而是分类栅格。重新分类栅格:

r <- reclass(r, c(0,500,1, 500,2000,2))

val <- getValues(r)
xy <- as.data.frame(xyFromCell(r,1:ncell(r)))
xy <- cbind(xy,val)

绘制分类栅格。也可以,但是图例是连续的

ggplot(na.omit(xy), aes(x=x, y=y, fill=val)) + geom_raster() + coord_equal()

如果我将值绘制为因子, map 就会出错

ggplot(na.omit(xy), aes(x=x, y=y, fill=factor(val))) + geom_raster() + coord_equal()

最佳答案

使用 R 版本 2.15.1、ggplot2_0.9.2.1 和 raster_2.0-12 绘制重新分类的图对我有用。如果适用,请尝试更新 R、包和依赖项。从代码的稍微修改版本开始:

f <- system.file("external/test.grd", package="raster")
r <- raster(f)
r <- reclassify(r, c(0,500,1, 500,2000,2))
val <- getValues(r)
xy <- as.data.frame(xyFromCell(r,1:ncell(r)))
xy <- cbind(xy,val)
ggplot(na.omit(xy), aes(x=x, y=y, fill=val)) + geom_raster() + coord_equal()
p <- ggplot(na.omit(xy), aes(x=x, y=y, fill=factor(val))) + 
  geom_raster() + 
  coord_equal()
try(ggsave(plot=p,<some file>,height=8,width=8))

我得到: graham jeffries - reclassified raster

请注意,classify() 已被弃用,reclassify() 是其替代品。

关于r - 使用 ggplot 绘制栅格因子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940495/

相关文章:

r - R 中的传单 : Select icons or CircleMarkers based on factor variable

r - 如何水平对齐图(ggplot2)?

r - 绘制整个栅格堆栈时添加栅格值

r - 如何编写循环以运行数据帧的t检验?

r - 如何在ggplot2中的两个关联点之间添加多条线段?

r - 使用 ggplot2 显示平滑(卷积)密度

r - 将 vegan 包中的 ordiellipse 函数绘制到 ggplot2 中创建的 NMDS 图上

gis - 在 QGIS 中播种大栅格图层的刷新

r - 计算 2 lon lats 之间的距离,但避免通过 R 中的 coaSTLine

r - 如何在 R 中使用 abline() 绘制简单的垂直线?