remover o título da legenda no ggplot

111

Estou tentando remover o título de uma lenda em ggplot2:

df <- data.frame(
  g = rep(letters[1:2], 5),
  x = rnorm(10),
  y = rnorm(10)
)

library(ggplot2)
ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom")

insira a descrição da imagem aqui

Eu vi essa pergunta e nenhuma das soluções parece funcionar para mim. A maioria dá um erro sobre como optsestá obsoleto e como usar em seu themelugar. Eu também tentei várias versões theme(legend.title=NULL), theme(legend.title=""), theme(legend.title=element_blank), mensagens etc. erro típica são:

'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)
'theme_blank' is deprecated. Use 'element_blank' instead. (Deprecated; last used in version 0.9.1)

Estou usando ggplot2pela primeira vez desde que a versão 0.9.3 foi lançada e estou achando difícil navegar por algumas das mudanças ...

smillig
fonte
5
Você pode usar labs()para isso: Adicione a linha labs(colour = "")ao seu código que produziu o gráfico acima.
Dennis

Respostas:

191

Você estava quase lá: basta adicionar theme(legend.title=element_blank())

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  theme(legend.title=element_blank())

Esta página do Cookbook for R fornece muitos detalhes sobre como personalizar as legendas.

Juba
fonte
2
Isso removerá todos os títulos de legenda. Para mais controle local, o guide = guide_legend()comando funciona. Para remover o título da legenda de preenchimento, mas para manter o título da legenda de cor, por exemploscale_fill_brewer(palette = "Dark2", guide = guide_legend(title = NULL)) + scale_color_manual(values = c("blue", "white", "red"))
PatrickT
9

Isso também funciona e também demonstra como alterar o título da legenda:

ggplot(df, aes(x, y, colour=g)) +
  geom_line(stat="identity") + 
  theme(legend.position="bottom") +
  scale_color_discrete(name="")
Roland
fonte
7
Isso substitui o título por uma string vazia e, portanto, causa um espaço extra entre o rótulo e a caixa da legenda, que seria visível apenas se a legenda tivesse uma caixa ou fundo de uma cor diferente de onde está posicionada. Portanto, está tudo bem para uma abordagem rápida e pronta em casos simples como, theme_bw()mas não o melhor, em casos em que a legenda tem uma caixa ao redor e está posicionada em algum lugar na área do gráfico (minha abordagem usual).
PatrickT
1
+1 para a observação. Eu tive o problema de usar duas legendas diferentes e o espaço em branco entre elas que foi criado pela solução acima. Definir scale_color_manual(name=element_blank())+para a legenda inferior resolveu isso para mim
joaoal
@joaoal, element_blank()parece ser a abordagem recomendada. A configuração name = NULL é outra maneira.
PatrickT
1

Outra opção usando labse definindo a cor para NULL.

ggplot(df, aes(x, y, colour = g)) +
  geom_line(stat = "identity") +
  theme(legend.position = "bottom") +
  labs(colour = NULL)

insira a descrição da imagem aqui

mpalanco
fonte
0

Para Error: 'opts' is deprecated. Use em seu theme()lugar. (Extinto; usado pela última vez na versão 0.9.1) 'Substituído opts(title = "Boxplot - Candidate's Tweet Scores")por labs(title = "Boxplot - Candidate's Tweet Scores"). Funcionou!

Shradha Shiwani
fonte
0

Uma vez que você pode ter mais de uma legenda em um gráfico, uma maneira de remover seletivamente apenas um dos títulos sem deixar um espaço vazio é definir o nameargumento da scale_função como NULL, ou seja,

scale_fill_discrete(name = NULL)

(parabéns a @pascal por um comentário em outro tópico )

vkehayas
fonte