我使用基本R函数创建带有图例的地图,并根据我在数据框中提供的值(new_df$foi
)对地图的子区域进行着色。
以下是使用图例制作地图的代码:
library(maptools)
library(plyr)
library(RColorBrewer)
library(fields)
library(raster)
suppressMessages(library(rgdal))
library(RColorBrewer)
#Determine breaks for colour
mybreaks= seq(0,max(new_df$foi),by = 0.01)
#Create palette
cols <- (colorRampPalette(brewer.pal(6,"OrRd"))(length(mybreaks)-2))
mycols<- c("grey90",cols)
#Match data with breaks
vcols = findInterval(c(new_df$foi),mybreaks)
#Plot
par(mar=c(0,0,2,4.5),oma=c(1,1,1,1))
plot(shapefile,col="grey90")
plot(shapefile[shapefile$code %in% new_df$code,],col=mycols[vcols],add=TRUE)
image.plot(legend.only=T,breaks=mybreaks,labels=mybreaks,col=mycols,legend.cex=1,cex=1,
axis.args = list(cex.axis = 1),legend.width=1.2,legend.shrink = .6)
这很好,因为中断(存储在矢量mybreaks中)遵循线性比例。但是我希望休息符合非线性比例。当我将休息时间更改为:
mybreaks = c(seq(0,0.1, by = 0.01),seq(0.1,max(new_df$foi), by = 0.1))
并重新运行代码,地图已成功绘制,但我收到以下警告:
Error in image.default(ix, iy, iz, xaxt = "n", yaxt = "n", xlab = "", :
increasing 'x' and 'y' values expected
并且情节中缺少传奇。
任何人都可以告诉我如何使用非线性着色比例显示图例。更喜欢使用基数R的答案,以便于实施,但如果有人使用ggplot2或其他什么也会很好的答案。
答案 0 :(得分:0)
这是ggplot的答案。如果你想要一个具有离散比例的图例,你必须在你的美学中指定你想要它的颜色。如果它是一个连续变量,那么你还必须告诉它将它视为一个因素,这就是“factor()”包装正在做的事情。然后,您还将包含指定值的scale_fill_manual(),或者可能在ggplot设置中以某种方式修改“scale_color_discrete()”。我知道scale_color_discrete适用于点和条等,可能需要修改填充颜色。
ggplot(数据,aes(x,y,group = foo,fill = factor(foo2))+ scale_fill_manual(values = c(“orange”,“red”,“gray”))