R光栅图非连续色标

时间:2014-08-01 01:13:37

标签: r ggplot2 raster

好的,所以我对此有一个史诗般的大脑抽筋,所以任何帮助都会受到赞赏。我正在使用栅格和ggplot绘制数据。下面是一个生成我创建的图形的示例:

r = raster(ncol=18, nrow=18, xmn=-120, xmx=-80, ymn=10, ymx=45)
outlines = as.data.frame(map("world", xlim=c(-120, -80), ylim=c(10, 45), plot=FALSE)     [c("x","y")])
map = geom_path(aes(x,y), inherit.aes = FALSE, data = outlines, alpha = 0.8, show_guide = FALSE, color = "gray")

lat = runif(10, 10,45)
lon = runif(10, -120,-80)
data = runif(10, -3,2)

xy = cbind(x = lon, y = lat)

dummy = rasterize(xy, r, field=data, fun=mean)
dummy.df = as.data.frame(dummy, row.names=NULL, optional = TRUE, xy = TRUE, centroids = TRUE)
colnames(dummy.df) <- c("lon", "lat", "data")


ggplot(data = dummy.df, aes(x=lon,y=lat)) + geom_tile(aes(fill = data)) + scale_colour_brewer(palette="Set1")

我遇到的问题是它使用的连续色标。我到处寻找,但无法找到与我的问题有关的任何内容(或者至少在我看过的6个多小时内找不到它)。我想要的色标是,比如使用上面的例子,-3和-2.5之间的数据值是红色,-2.5和-2.0之间是橙色,-2.0和-1.5是黄色等等。我并没有使用scale_colour_brewer,所以任何建议都会受到如此多的赞赏并让我摆脱痛苦。谢谢!

1 个答案:

答案 0 :(得分:1)

有一些错误,我不知道哪个包函数map。如果这就是你要找的答案,那么我并不是真的。

library(ggplot2)
library(raster)
library(RColorBrewer)
r = raster(ncol=18, nrow=18, xmn=-120, xmx=-80, ymn=10, ymx=45)
outlines = as.data.frame(map("world", xlim=c(-120, -80), ylim=c(10, 45), plot=FALSE)     [c("x","y")])
map = geom_path(aes(x,y), inherit.aes = FALSE, data = outlines, alpha = 0.8, show_guide = FALSE, color = "gray")

lat = runif(10, 10,45)
lon = runif(10, -120,-80)
data = runif(10, -3,2)

xy = cbind(x = lon, y = lat)

dummy = rasterize(xy, r, field=data, fun=mean)
dummy.df = as.data.frame(dummy, row.names=NULL, optional = TRUE, xy = TRUE, centroids = TRUE)
colnames(dummy.df) <- c("lon", "lat", "data")

breaks2 <-seq(-2.5,2,0.5)
dummy.df$Col<-as.character(cut(dummy.df$data,breaks = breaks2))
dummy.df$Col[is.na(dummy.df$Col)] <- "Empty"
#there not enouth colours in this palette so I added green
Colors <- c(brewer.pal(9, "Set1"),"green")
names(Colors) <- unique(dummy.df$Col)
Colors["Empty"]="grey40"
ggplot(data = dummy.df, aes(x=lon,y=lat)) + geom_tile(aes(fill = Col))+
  scale_fill_manual(values=c(Colors))

You can choose colors manually

您可以手动选择颜色,但需要为它们指定适当的名称。