Como posso alterar o título de uma legenda no ggplot2? [fechadas]

58

Eu tenho um gráfico que estou fazendo no ggplot2 para resumir os dados que são de um conjunto de dados com célula 2 x 4 x 3. Consegui fazer painéis para a variável de dois níveis usando facet_grid(. ~ Age)e definindo os eixos x e y usando aes(x=4leveledVariable, y=DV). Eu costumava aes(group=3leveledvariable, lty=3leveledvariable)produzir o enredo até agora. Isso me dá uma visualização em painéis pela variável de dois níveis, com o eixo X representando a variável de quatro níveis e as diferentes linhas plotadas nos painéis para a variável de três níveis. Mas a chave para a variável de três níveis é intitulada com o nome da variável de três níveis e eu quero que seja um título que tenha um espaço de caracteres. Como posso renomear o título da legenda?

Coisas que tentei que parecem não funcionar (onde abpestá o meu objeto 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")

Dados de exemplo:

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
fonte
2
@drknexus - se você puder compartilhar seus dados, isso seria útil ou apontar para um conjunto de dados semelhante no R que tenha a mesma forma dos seus dados.
Chase
11
Todo mundo aqui parece muito experiente, mas eu sei que para questões relacionadas ao ggplot, acho o grupo do Google incrivelmente útil. groups.google.com/group/ggplot2
Dason
Além da documentação bem conhecida e excelente na página de Hadley, a referência não tão conhecida no Git Hub realmente ajuda com esse tipo de problema.
hans0l0
Como alternativa, theme_get()fornece a mesma referência no console.
precisa
11
Em resposta a vários sinalizadores que solicitam migração de SO, é realmente impossível; veja por que em SO.meta: meta.stackexchange.com/q/8004/150510 , meta.stackexchange.com/q/151890/150510 .
chl

Respostas:

25

Outra opção é usar

p + labs(aesthetic='custom text')     

Por exemplo, o exemplo de Chase seria semelhante a:

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

e produza a figura: insira a descrição da imagem aqui

user116293
fonte
Atualmente, estou propenso a preferir usar labs () para modificar rótulos do que especificá-los em uma escala / eixo por escala / eixo.
russellpierce
38

Você pode alterar o título da legenda modificando a escala dessa legenda. Aqui está um exemplo usando o conjunto de dados de CO2

library(ggplot2)

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

EDITAR:

Usando os dados de exemplo acima, aqui está uma solução funcional. Eu acho que isso imita o enredo que o @drknexus está tentando criar. Como uma observação lateral, se alguém puder explicar por que temos que tratar a V3 como um fator para que ela seja mapeada para a lenda, eu agradeceria.

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 

texto alternativo

correr atrás
fonte
Eu acho que o que estou perdendo é uma função como scale_color_discrete que se liga à especificação "group" ou "lty" no ggplot (dados = ex.daata, aes (x = V4, y = DV, grupo = V3, lty = V3) ))
russellpierce
11
Ah eu achei: scale_linetype_discrete (name = "bob")
russellpierce
@ Phase: Edite com o bit scale_linetype_discrete e eu aceito sua resposta.
russellpierce
11
@drknexus - o problema com isso está no meu exemplo de trabalho, o comando apropriado é scale_colour_discrete()e o código com o qual você está trabalhando é obviamente um pouco diferente. Eu não sei o que o código é ...
perseguição
3
@ Phase Re: "por que temos que tratar V3 como um fator" scale_linetype_discreteespera uma variável com valores discretos (fator ou caractere, de plyr::is.discrete), verifique o código src no Github, j.mp/ejaRRT . Boa resposta (+1).
chl