Pergunta sobre ggplot2, r – Embrulhe o texto da legenda em ggplot2

27

Enquanto produzindo gráficos usando ggplot2, eu tenho alguns nomes de lendas longos que eu quero incluir em duas linhas. Por exemplo:

<code>a <- (1:10)
b <- c(1,1.5,2,4,5,5.3,7,9,9.5,9.8)
places = c("Birmingham","Chester-le-street","Cambridge", "Newcastle-upon-Tyne","Peterborough","Cambridge", "Newcastle-upon-Tyne","Peterborough","Liverpool","Stratford-upon-Avon")
df1 = data.frame(a,b,places)
library(ggplot2)
i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3) + opts(legend.position="bottom")
</code>

Como eu iria envolver os itens da legenda quando a caixa estivesse na parte inferior - digamos, em 2 ou 3 linhas? No momento, os sete itens da legenda estão próximos um do outro. Eu preferiria que eles sejam exibidos em duas linhas (com, digamos, quatro cidades na linha superior e três cidades na segunda linha).

Muito obrigado antecipadamente.

Eu dividiria sua pergunta em duas questões separadas. Uma delas seria respondida pela minha resposta (envolvendo o texto como ficou aparente na pergunta original) e um segundo sobre como criar legendas de várias colunas com ggplot. PS: a localização da legenda não deve mudar muito para a resposta à sua pergunta). Etienne Low-Décarie

Sua resposta

2   a resposta
20

Do seu exemplo:

<code>df1$places<-sub("-", "- \n ", df1$places)  

i = ggplot(df1, aes(x=a, y=b)) + geom_point(aes(colour = places), size=3)
</code>

Notas: - Você pode usar o gsub para substituir todo o "-" por "- \ n"

Obrigado @Etienne Low-Décarie, mas isso não é bem o que eu quero. Eu ainda quero a legenda no botton, mas o texto da legenda é muito longo. Então, em vez dos 7 rótulos em uma linha longa, eu os quero em duas linhas (mantendo o gráfico de forma semelhante a como está em seu exemplo). KT_1
@ KatieT Você precisa ser mais claro sobre se você quer envolver oetiquetas de texto na legenda através de 2 linhas, ou oitens de legenda ou ambos. Você pergunta apenas mencionado envolvendo os "nomes das lendas", que é o que esta resposta aborda. joran
Você sabe como fazer isso com o título da legenda? user1685185
27

<code>library(scales)
i + guides(colour = guide_legend(nrow = 2))
</code>

Mas você pode achar que ainda deseja empregar a técnica de quebra automática de texto para ajustá-la.

Além dissocolour, isso também funciona para outras estéticas, comoguides(linetype=guide_legend(nrow=2)). Paul Rougieux

Perguntas relacionadas