Quero anotar algum texto na última faceta do gráfico com o seguinte código:
library(ggplot2)
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p <- p + facet_grid(. ~ cyl)
p <- p + annotate("text", label = "Test", size = 4, x = 15, y = 5)
print(p)
Mas esse código anota o texto em todas as facetas. Eu apreciaria muito se você me orientasse como obter o texto anotado em apenas uma faceta.
r
ggplot2
facet
facet-wrap
facet-grid
MYaseen208
fonte
fonte
Respostas:
Normalmente, você faria algo assim:
Ele deve funcionar sem especificar a variável fator completamente, mas provavelmente lançará alguns avisos:
fonte
geom_text
apenas uma linha.annotate()
...?Aqui está o gráfico sem anotações de texto:
Vamos criar um quadro de dados adicional para armazenar as anotações de texto:
Como alternativa, podemos especificar manualmente a posição de cada rótulo:
Também podemos rotular plotagens em duas facetas:
Notas:
-Inf
eInf
posicionar o texto nas bordas de um painel.hjust
evjust
ajustar a justificativa do texto.dat_text
deve ter uma coluna que funcione com o seufacet_grid()
oufacet_wrap()
.fonte
colnames()
o textodata.frame
corresponde aos dados que você está prestes a plotar.Se alguém estiver procurando uma maneira fácil de rotular facetas para relatórios ou publicações, o pacote
egg
( CRAN ) possui funçõestag_facet()
etag_facet_outside()
funções muito bacanas .Etiquetar dentro
Padrão
Nota: se você deseja manter o texto e o plano de fundo da faixa, tente adicionar
strip.text
estrip.background
voltartheme
ou removertheme(strip.text = element_blank(), strip.background = element_blank())
datag_facet()
função original .Alinhar o canto superior direito e usar algarismos romanos
Alinhar o canto inferior esquerdo e usar letras maiúsculas
Defina suas próprias tags
Etiquetar fora
Editar : adicionando outra alternativa usando o pacote stickylabeller
Criado pelo pacote reprex (v0.2.1)
fonte
tag_facet
nixingstrip.text = element_blank()
Warning: Ignoring unknown parameters: strip.text
Acho que a resposta acima lab = "Text" é inútil, o código abaixo também está ok.
No entanto, se você quiser rotular de forma diferente em subgráficos diferentes, tudo ficará bem desta maneira:
fonte
Expandindo um pouco a excelente resposta de joran, para esclarecer como o dataframe da etiqueta funciona.
Você pode pensar em "mpg" e "wt" como as coordenadas xey, respectivamente (acho mais fácil acompanhar os nomes das variáveis originais do que renomeá-los, como na excelente resposta de Kamil). Você precisa de uma linha por rótulo e a coluna "cyl" mostra a qual faceta cada linha está associada.
fonte
Eu não sabia sobre o
egg
pacote, então aqui está umaggplot2
solução simples para o pacotefonte