Além de todas as brincadeiras, às vezes queremos destacar áreas específicas de um gráfico ou adicionar rótulos aos casos (com n pequeno), por exemplo.
Para isso, existem as funções geom_text()
e annotate()
, que podem ser usadas com ggplot
. Vamos usar novamente o gráfico de dispersão do início, mas desta vez limitaremos o número para 15, para obter uma representação clara.
geom_jitter()
não pode ser usado, pois os rótulos de dados aparecem no ponto de dados e não no ponto de dados jitterizado!
scatter2 <- ggplot(
pss[1:15,],
aes(
stfeco,
stfdem
)
) +
geom_point(col = "blue") +
scale_x_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_y_continuous(
breaks = seq(
0,
10,
1
)
)
scatter2
Com a função
geom_text()
, é possível adicionar rótulos aos pontos de dados. Por exemplo, o número da linha ou a variável de ID. Vamos usar a última opção, pois o número da linha pode mudar com as ordenações e, portanto, não é único. Portanto, agora adicionamos um label
com a função aes
(idno
).```
scatter2 +
geom_text(
aes(label = idno)
)
Dentro de
geom_text()
, agora podemos fazer mais ajustes. Alguns deles já conhecemos, dois outros importantes são nudge_y
e nudge_x
, que movem o início do texto no respectivo eixo.
scatter2 +
geom_text(
aes(label = idno),
size = 2,
nudge_y = -.15
)
Se ainda assim quisermos representar todos os pontos de dados e destacar apenas alguns pontos específicos, isso é muito fácil de fazer: queremos mostrar apenas os primeiros dez casos e, portanto, limitamos os dados em geom_text()
. Isso também é possível usando subset()
com várias condições.
ggplot(
pss,
aes(
stfeco,
stfdem
)
) +
geom_point(
alpha = .2,
col = "blue"
) +
scale_x_continuous(
breaks = seq(
0,
10,
1
)
) +
scale_y_continuous(
breaks = seq(
0,
10,
1
)
) +
geom_text(
aes(label = idno),
data = pss[1:10,]
)
## Warning: Removed 96 rows containing missing values or values outside the scale range
## (`geom_point()`).
annotate()
oferece possibilidades muito maiores. Com ela, não apenas podemos adicionar rótulos, mas também destacar áreas específicas dentro de um gráfico. Vamos usar novamente o gráfico com jitter e destacar uma área específica no gráfico:
scatter2 +
annotate(
"rect",
xmin = 6.5, # this corresponds to the axis scale!
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen"
)
A desvantagem é imediatamente evidente! Como o ggplot
é abordado por camadas, o layer annotate()
deve vir antes do layer geom_jitter()
. Ou podemos adicionar alpha
para alterar a visibilidade:
scatter2 +
annotate(
"rect",
xmin = 6.5,
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen",
alpha = .1
)
Agora queremos adicionar uma legenda ao gráfico para que o leitor saiba qual área estamos marcando aqui:
scatter2 +
annotate(
"rect",
xmin = 6.5,
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen",
alpha = .1
) +
annotate(
"text",
x = 4,
y = 9,
label = "highlighted area", # with \n you get a new line
colour = "darkgreen"
)
Como outra opção, annotate()
oferece a possibilidade de criar linhas, para que possamos apontar nosso texto para o campo:
scatter2 +
annotate(
"rect",
xmin = 6.5,
xmax = 8.5,
ymin = 7.5,
ymax = 10.5,
colour = "darkgreen",
fill = "lightgreen",
alpha = .1
) +
annotate(
"text",
x = 4,
y = 9,
label = "highlighted area", # with \n you get a new line
color = "darkgreen"
) +
annotate(
"segment",
x = 4.6,
xend = 6.5,
y = 9,
yend = 9,
color = "darkgreen",
arrow = arrow()
)
No último passo, você aprenderá a representar valores ausentes!