Jak mogę zmienić tytuł legendy w ggplot2? [Zamknięte]

58

Mam wykres, który tworzę w ggplot2, aby podsumować dane, które pochodzą z 2 x 4 x 3 komórek. Byłem w stanie wykonać panele dla zmiennej 2-poziomowej za pomocą facet_grid(. ~ Age)i ustawić za pomocą osi xiy aes(x=4leveledVariable, y=DV). Kiedyś aes(group=3leveledvariable, lty=3leveledvariable)produkować fabułę tej pory. To daje mi wizualizację, która jest panelowana przez zmienną 2-poziomową, z osią X reprezentującą zmienną 4-poziomową i różnymi liniami wykreślonymi w panelach dla zmiennej 3-poziomowej. Ale klucz dla zmiennej trójpoziomowej jest zatytułowany nazwą zmiennej trójpoziomowej i chcę, aby był to tytuł z przestrzenią znaków. Jak mogę zmienić nazwę tytułu legendy?

Rzeczy, które próbowałem, które wydają się nie działać (gdzie abpjest mój obiekt ggplot2):

 abp <- abp + opts(legend.title="Town Name")
 abp <- abp + scale_fill_continuous("Town Name")
 abp <- abp + opts(group="Town Name")
 abp <- abp + opts(legend.title="Town Name")

Przykładowe dane:

ex.data <- data.frame(DV=rnorm(2*4*3), V2=rep(1:2,each=4*3), V4=rep(1:4,each=3), V3=1:3)
russellpierce
źródło
2
@drknexus - jeśli możesz udostępnić swoje dane, byłoby to pomocne lub wskazać podobny zestaw danych w R, który ma taki sam kształt jak twoje dane.
Chase
1
Wszyscy tutaj wydają się bardzo kompetentni, ale wiem, że w przypadku pytań związanych z ggplot uważam, że ich grupa google jest niezwykle pomocna. groups.google.com/group/ggplot2
Dason
Oprócz dobrze znanej i doskonałej dokumentacji na stronie Hadleya, nie tak znane odniesienie w Git Hub naprawdę pomaga w tego rodzaju problemach.
hans0l0
Alternatywnie, theme_get()zapewnia to samo odniesienie w konsoli.
Brandon Bertelsen,
1
W odpowiedzi na kilka flag z prośbą o migrację SO, jest to w rzeczywistości niemożliwe; zobacz dlaczego na SO.meta: meta.stackexchange.com/q/8004/150510 , meta.stackexchange.com/q/151890/150510 .
chl

Odpowiedzi:

25

Inną opcją jest użycie

p + labs(aesthetic='custom text')     

Na przykład przykład Chase'a mógłby wyglądać następująco:

library(ggplot2)

ex.data <- data.frame(DV=rnorm(2*4*3),V2=rep(1:2,each=4*3),V4=rep(1:4,each=3),V3=1:3)
p <- qplot(V4, DV, data=ex.data, geom="line", group=V3, linetype=factor(V3)) + facet_grid(. ~ V2)
p + labs(linetype='custom title')

i uzyskaj liczbę: wprowadź opis zdjęcia tutaj

użytkownik116293
źródło
Obecnie wolę używać labs () do modyfikowania etykiet niż określania ich według skali / osi według skali / osi.
russellpierce
38

Możesz zmienić tytuł legendy, modyfikując skalę dla tej legendy. Oto przykład z wykorzystaniem zestawu danych CO2

library(ggplot2)

p <- qplot(conc, uptake, data = CO2, colour = Type) + scale_colour_discrete(name = "Fancy Title")
p <- p + facet_grid(. ~ Treatment)
p 

EDYTOWAĆ:

Korzystając z przykładowych danych z góry, oto działające rozwiązanie. Myślę, że to naśladuje fabułę, którą @drknexus próbuje stworzyć. Na marginesie, jeśli ktokolwiek może wyjaśnić, dlaczego musimy traktować V3 jako czynnik mapowania go do legendy, doceniłbym to.

p <- qplot(V4, DV, data = ex.data, geom = "line", group = V3, lty = factor(V3)) 
p <- p + scale_linetype_discrete(name = "Fancy Title") + facet_grid(. ~ V2)
p 

alternatywny tekst

Gonić
źródło
Myślę, że brakuje mi funkcji typu scale_color_discrete, która łączy się ze specyfikacją „group” lub „lty” w ggplot (data = np. Dane, aes (x = V4, y = DV, grupa = V3, lty = V3 ))
russellpierce
1
Ach, znalazłem to: scale_linetype_discrete (name = "bob")
russellpierce
@Case: Edytuj za pomocą bitu scale_linetype_discrete, a zaakceptuję twoją odpowiedź.
russellpierce
1
@drknexus - problem z tym jest w moim działającym przykładzie, właściwe polecenie jest, scale_colour_discrete()a kod, z którym pracujesz, jest oczywiście nieco inny. Nie wiem, co to za kod ...
Chase
3
@Chase Re: „dlaczego musimy traktować V3 jako czynnik” scale_linetype_discreteoczekuje zmiennej o dyskretnych wartościach (czynnik lub znak, od plyr::is.discrete), sprawdź kod src na Github, j.mp/ejaRRT . Dobra odpowiedź (+1).
chl