在ggplot中指定地图的颜色比例

时间:2012-09-01 17:44:50

标签: r ggplot2

难以在ggplot中设置地图的颜色比例。我需要灰度。非常感谢我出错的想法。我还想知道是否有更有效的方法将颜色变量输入ggplot(即将其附加到'强化'数据)?

library(ggplot2)
states <- map_data("state")
var <- data.frame(table(states$region)) # using rows as a dummy variable
states$variable <- var$Freq[match(states$region,var$Var1)]

map <- ggplot(states, aes(x=long, y=lat)) + 
  geom_polygon(aes(group=group, fill=variable), col=NA,lwd=0)

map + scale_colour_gradient(low='white', high='grey20')
map + scale_colour_grey()

enter image description here

2 个答案:

答案 0 :(得分:11)

您需要使用scale_fill_*而不是scale_color_*。对于多边形几何体,多边形的填充颜色与fill美学相关联,而不是color美学。通常,用于更改特定比例的详细信息的函数是scale_ aesthetic_name _ type_of_scale,例如scale_fill_gradient

答案 1 :(得分:3)

此代码适用于我。

library(ggplot2)
states <- map_data("state")
var <- data.frame(table(states$region))
states$variable <- var$Freq[match(states$region,var$Var1)]
map <- ggplot(states, aes(x=long, y=lat,fill=variable,group=group)) + geom_polygon()
map + scale_fill_gradient(low='white', high='grey20')

处理离散变量问题的一种简单方法是创建一个&#34;假的&#34;使用调色板功能的连续调色板。请参阅以下示例。

定义调色板,这里我使用黑白代码的十六进制代码,但你可以使用任何颜色

gs.pal <- colorRampPalette(c("#FFFFFF","#000000"),bias=.1,space="rgb")

现在创建一些假数据

x <- rnorm(100)
dat <- data.frame(cbind(x))
dat$fac <- as.factor(sort(rep(1:5,20)))
dat$y <- x * as.numeric(dat$fac)

接下来用ggplot函数scale_*类型_manual绘制它,因为它的颜色 在您使用scale_colour_manual但在您之上使用scale_fill_manual

ggplot(dat,aes(x=x,y=y,colour=fac))+geom_point()+scale_colour_manual(values=gs.pal(5))