2012-02-17 123 views
6

我相信这个问题与之前询问的类似问题略有不同,因为使用了scale_fill_brewer(。我工作在一个地区分布与此类似https://gist.github.com/233134更改文字/标签ggplot图例

,看起来像这样:

Chloropleth

而像传说:

legend

我喜欢它,但要将图例上的标签从切割外观标签(例如(2,4))更改为更友好的内容,如'2%至4%'或'2% - 4%'。我在其他地方看过它;很容易更改刻度__中的标签,如here所示。我似乎无法弄清楚标签=参数的放置位置。我当然可以重新编码choropleth$rate_d,但这似乎是低效的。我应该在哪里放置参数labels=c(A, B, C, D...)

这里是一块感兴趣的代码(为完整的代码使用上面的链接)

choropleth$rate_d <- cut(choropleth$rate, breaks = c(seq(0, 10, by = 2), 35)) 

# Once you have the data in the right format, recreating the plot is straight 
# forward. 

ggplot(choropleth, aes(long, lat, group = group)) + 
    geom_polygon(aes(fill = rate_d), colour = alpha("white", 1/2), size = 0.2) + 
    geom_polygon(data = state_df, colour = "white", fill = NA) + 
    scale_fill_brewer(pal = "PuRd") 

预先感谢您的协助。

编辑:使用迪文的方法(应该已经张贴了这个错误,因为这是我撞到前)

> ggplot(choropleth, aes(long, lat, group = group)) + 
+ geom_polygon(aes(fill = rate_d), colour = alpha("white", 1/2), size = 0.2) + 
+ geom_polygon(data = state_df, colour = "white", fill = NA) + 
+ scale_fill_brewer(pal = "PuRd", labels = lev4) 
Error: Labels can only be specified in conjunction with breaks 
+0

你太快了。我看到了错误并修复了它。我得到了一个稍微更多的信息:“错误:标签和中断必须是相同的长度” – 2012-02-17 03:28:45

回答

10

除了增加水平的修改版本,你还需要设置scale_fill_brewer的“休息”参数:

lev = levels(rate_d) # used (2, 4] as test case 
lev2 <- gsub("\\,", "% to ", lev) 
lev3 <- gsub("\\]$", "%", lev2) 
lev3 
[1] "(2% to 4%" 
lev4 <- gsub("\\(|\\)", "", lev3) 
lev4 
[1] "2% to 4%" 

ggplot(choropleth, aes(long, lat, group = group)) + 
    geom_polygon(aes(fill = rate_d), colour = alpha("white", 1/2), size = 0.2) + 
    geom_polygon(data = state_df, colour = "white", fill = NA) + 
    scale_fill_brewer(pal = "PuRd", labels = lev4, , breaks=seq(0, 10, by = 2)) 
+0

我试过了,得到我以前得到的错误(尽管使用了gsub)。我编辑了我的帖子以反映这个错误。 – 2012-02-17 03:27:20

+0

编辑完成后,效果非常好。谢谢迪文。这是休息!杜恩,那是错误所说的。我只是不知道该怎么办。 – 2012-02-17 03:31:27

+0

@TylerRinker我意识到这是一个令人讨厌的行为,但我担心人们可能会错误地设置标签,并且他们最终不符合休息时间。 – hadley 2012-02-17 17:17:22