2012-02-17 281 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