Como o título diz: Como plotar uma legenda fora da área de plotagem ao usar gráficos de base?
Pensei em mexer layout
e produzir uma trama vazia para conter apenas a legenda, mas eu estaria interessado de alguma maneira usando apenas as instalações básicas do gráfico e, por exemplo, par(mar = )
para obter algum espaço à direita da trama para a legenda.
Aqui está um exemplo:
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
produz:
Mas como dito, eu gostaria que a legenda estivesse fora da área de plotagem (por exemplo, à direita do gráfico / plotagem).
Respostas:
Talvez o que você precise é
par(xpd=TRUE)
permitir que as coisas sejam desenhadas fora da região da trama. Então, se você fizer o enredo principal,bty='L'
terá algum espaço à direita para uma lenda. Normalmente, isso seria cortado na região da plotagem, mas,par(xpd=TRUE)
com um pouco de ajuste, você pode obter uma legenda o mais correta possível:fonte
par(xpd=NA)
é ainda mais poderosa (ou seja, parcelas para mais regiões).par
chamada separada logo antes da legenda. No meu enredo, useipar(new=T)
em várias outras ocasiões e simplesmente queria adicionar oxpd
parâmetro na mesma chamada, o que causa problemas.Ninguém mencionou o uso de
inset
valores negativos paralegend
. Aqui está um exemplo, onde a legenda está à direita do gráfico, alinhada ao topo (usando a palavra-chave"topright"
).O primeiro valor de
inset=c(-0.2,0)
talvez precise ser ajustado com base na largura da legenda.fonte
xpd
deve ser definido comoTRUE
para que a inserção negativa funcione. Mas às vezes não. Com o comandoargs.legend=list(x="bottom", horiz=TRUE, inset=-0.2)
dentro de umbarplot(...
, não parece precisar,xpd=TRUE
mas apenas comlegend(x="bottom", horiz=TRUE, inset=-0.2)
o que parecexpd=TRUE
. Alguma ideia? Estou apenas confuso em passar meus argumentos?Outra solução, além dos ondes já mencionados (usando
layout
oupar(xpd=TRUE)
), é sobrepor sua plotagem com uma plotagem transparente sobre todo o dispositivo e adicionar a legenda a isso.O truque é sobrepor um gráfico (vazio) sobre a área de plotagem completa e adicionar a legenda a isso. Nós podemos usar a
par(fig=...)
opção Primeiro, instruímos R para criar um novo gráfico em todo o dispositivo de plotagem:É necessário definir
oma
emar
é necessário, pois queremos que o interior da trama cubra todo o dispositivo.new=TRUE
é necessário para impedir que o R inicie um novo dispositivo. Podemos então adicionar o gráfico vazio:E estamos prontos para adicionar a legenda:
adicionará uma legenda no canto inferior direito do dispositivo. Da mesma forma, podemos adicionar a legenda à margem superior ou direita. A única coisa que precisamos garantir é que a margem da trama original seja grande o suficiente para acomodar a legenda.
Colocando tudo isso em uma função;
E um exemplo Primeiro, crie o gráfico, certificando-se de que temos espaço suficiente na parte inferior para adicionar a legenda:
Em seguida, adicione a legenda
Resultando em:
fonte
Desculpe por ressuscitar um thread antigo, mas eu estava com o mesmo problema hoje. A maneira mais simples que encontrei é a seguinte:
Encontrado aqui: http://www.harding.edu/fmccown/R/
fonte
Eu gosto de fazer assim:
O único ajuste necessário é definir a margem certa para ser larga o suficiente para acomodar a legenda.
No entanto, isso também pode ser automatizado:
fonte
Recentemente, achei uma função muito fácil e interessante para imprimir legendas fora da área de plotagem onde você deseja.
Faça a margem externa no lado direito da plotagem.
Crie uma plotagem
Adicione legenda e use a função localizador (1) como abaixo. Depois, basta clicar no local desejado após o carregamento, seguindo o script.
Tente
fonte
Eu posso oferecer apenas um exemplo da solução de layout já apontada.
fonte
Adicionando outra alternativa simples que é bastante elegante na minha opinião.
Seu enredo:
Lenda:
Resultado:
Aqui, apenas a segunda linha da legenda foi adicionada ao seu exemplo. Por sua vez:
inset=c(0,1)
- move a legenda por fração da região da plotagem nas direções (x, y). Nesse caso, a legenda está em"bottomright"
posição. Ele é movido por 0 regiões de plotagem na direção x (portanto permanece na "direita") e por 1 região de plotagem na direção y (de baixo para cima). E acontece que aparece logo acima da trama.xpd=TRUE
- vamos aparecer a legenda fora da região de plotagem.horiz=TRUE
- instrui a produzir uma legenda horizontal.bty="n"
- um detalhe de estilo para se livrar da caixa delimitadora da legenda.O mesmo se aplica ao adicionar legenda ao lado:
Aqui, simplesmente ajustamos as posições das legendas e adicionamos espaço de margem adicional ao lado direito do gráfico. Resultado:
fonte
Você poderia fazer isso com a API Plotly R , com o código ou com a GUI arrastando a legenda para onde desejar.
Aqui está um exemplo. O gráfico e o código também estão aqui .
Você pode posicionar a legenda fora do gráfico, atribuindo um dos valores xey para 100 ou -100.
Aqui estão as outras opções:
list("x" = 100, "y" = 0)
para parte inferior direita exteriorlist("x" = 100, "y"= 1)
Parte superior direita do lado de foralist("x" = 100, "y" = .5)
Fora Direito Médiolist("x" = 0, "y" = -100)
Sob Esquerdalist("x" = 0.5, "y" = -100)
Abaixo do centrolist("x" = 1, "y" = -100)
Sob DireitoEntão a resposta.
response = p$plotly(x,y,x2,y2, kwargs=list(layout=layoutstyle));
Plotly retorna um URL com seu gráfico quando você faz uma chamada. Você pode acessá-lo mais rapidamente ligando
browseURL(response$url)
para que ele abra seu gráfico no seu navegador.Isso nos dá esse gráfico. Você também pode mover a legenda de dentro da GUI e, em seguida, o gráfico será dimensionado de acordo. Divulgação completa: estou na equipe Plotly.
fonte
Experimente o
layout()
que eu usei para isso no passado, simplesmente criando um gráfico vazio abaixo, dimensionado adequadamente em cerca de 1/4 ou mais e colocando as partes da legenda manualmente nele.Existem algumas perguntas mais antigas sobre
legend()
quais devem começar.fonte