2012-02-17 16 views
6

Uważam, że to pytanie różni się nieco od podobnych pytań zadawanych tutaj wcześniej z powodu użycia scale_fill_brewer(. Ja pracuję nad choropleth podobna do tej jednej https://gist.github.com/233134Zmień tekst/etykiety legenda ggplot

który wygląda tak:

Chloropleth

i legendy jak:

legend

Lubię go, ale chcesz zmień etykiety na legendzie z etykiet wyglądających na cut, tj. (2, 4) na coś bardziej przyjaznego, np. "2% do 4% 'lub' 2% - 4% ". Widziałem gdzie indziej, s łatwo zmienić etykiety wewnątrz skali _... jak widać here. Nie mogę się domyślić, gdzie umieścić argument = argument. Mogę oczywiście ponownie kodować choropleth$rate_d, ale wydaje się to nieefektywne. Gdzie powinienem umieścić argument: labels=c(A, B, C, D...)?

Oto kawałek kodu zainteresowania (dla pełnego kodu użyj linku powyżej)

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") 

Z góry dziękuję za pomoc.

EDIT: przy użyciu metody Dwin jest (powinien napisali ten błąd jest to, co ja spotkało się z wcześniej)

> 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

Jesteś zbyt szybki. Widziałem błąd i naprawiłem go. Dostałem nieco bardziej pouczającą wiadomość: "Błąd: Etykiety i przerwy muszą być tej samej długości" –

Odpowiedz

10

Oprócz dodawania zmodyfikowaną wersję poziomów, trzeba także ustawić parametr "breaks" do 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

Wypróbowałem to i otrzymałem błąd, który otrzymywałem wcześniej (przyjemne użycie gsub). Zmieniłem mój post, aby odzwierciedlić ten błąd. –

+0

Po edycji działa idealnie. Dzięki DWin. To były przerwy! Duh, tak właśnie powiedział błąd. Po prostu nie wiedziałem, co z tym zrobić. –

+0

@ TylerRinker Zdaję sobie sprawę, że jest to nieco denerwujące zachowanie, ale obawiałem się, że ludzie źle ustawią etykiety i skończy się to w zgodzie z przerwami. – hadley