Ajuda com Legenda no GGplot

Olá pessoal. Estou com uma dificuldade em um gráfico do GGplot. A legenda é composta pelo geom_line e por um geom_point usando “shape”. Eu crio a legende manualmente com a função scale_manual. Porém, na legenda, o “shape” fica sempre atrás da linha dificultando a visualização, sendo que no gráfico isso é fácil de resolver, já que as camadas vão sendo postas de acordo com a ordem do código no GGplot. Mas no scale_manual não parece ser deste jeito. Alguém pode me ajudar com a ordem que a imagem aparece na legenda?

Usei um banco do AER para que o exemplo ficasse reprodutível.

library(tidyverse)
library(AER)
graph_desp_ab <- as_tibble(GSOEP9402) %>% 
  select("ano" =  year, "q_ibp" = memployment, "porte_pop" = school, 
         "desp_pop_cob_median" =  meducation) %>% 
  mutate(ano = as.double(ano),
         q_ibp = as.factor(q_ibp),
         porte_pop = as.factor(porte_pop)) %>%
  group_by(ano, q_ibp, porte_pop) %>% 
  summarise(desp_pop_cob_median = mean(desp_pop_cob_median)) %>% 
  ggplot() +
  geom_line(aes(x= ano, y = desp_pop_cob_median, color = q_ibp), size = 1.3) +
  # geom_point(aes(x = ano, y = desp_pop_cob_median, shape = q_ibp, color = q_ibp), size = 1.8) +
  geom_point(aes(x= ano, y = desp_pop_cob_median, shape = q_ibp), color = "black", fill = "white", size = 1.8) +
  geom_smooth(aes(x = ano, y = desp_pop_cob_median, color = "Curva de tendência mediana"),size = 1.6) +
  labs(
    #title = "Despesa mediana municipal em APS¹ por porte populacional e privação socioeconômica do município.",
    # shape = "Índice Brasileiro de Privação",
    color = "Índice Brasileiro de Privação",
    x = "Ano",
    y = "Despesa em APS por habitante coberto (R$)",
    caption = "Fonte: SIOPS/MS") + 
  theme_bw()+
  scale_x_continuous(breaks = seq(1994,2002,1)) +
  scale_color_manual(name = "Índice Brasileiro de Privação",
                     values = c("fulltime" = "#4D4D4D",
                                "parttime" = "#737373",
                                "none" = "#A4A4A4",
                                "Curva de tendência mediana" = "black")) +
  scale_shape_manual(name = "Índice Brasileiro de Privação",
                     values = c("fulltime" = 21,
                                "parttime" = 22,
                                "none" = 23,
                                "Curva de tendência mediana" = NA)) +
  
  theme(panel.background = element_rect(fill = 'white'),
        axis.text.x = element_text(size = 8,
                                   angle = 90,
                                   hjust = 0.5,
                                   vjust = 0.5),
        axis.text.y = element_text(size = 8),
        plot.title = element_text(size = 9, 
                                  face = "bold", 
                                  hjust = 0),
        plot.caption = element_text(size = 8),
        axis.title = element_text(size = 9),
        legend.title = element_text(size = 8, face = "bold"),
        legend.text = element_text(size = 8),
        legend.position = c(0.5, 0.12)) +
  facet_wrap(vars(porte_pop))

@Rafael_Damasceno o código ficou bem zoado.
Tenta gerar um exemplo com reprex, fica melhor pra documentar e pra ajudar.

O problema é o geom_smooth()!
Aqui temos 2 soluções que eu imagino:

  1. Colocar o geom_smooth() antes do geom_point()
    Nesse caso, a linha de tendência vai aparecer por baixo dos pontos, o que talvez não seja a melhor opção já que em alguns pontos parece que ela é uma linha conectada por pontos!
    image

  2. Deixar essa ordem e retirar a legenda do geom_smooth() com o argumento show.legend = FALSE
    Nesse outro caso, a linha de tendência continua acima do gráfico e a legenda fica normal, mas sem o erro padrão na legenda (que eu particularmente acho estranho em todos como ficou no seu exemplo`).
    image

Muito obrigado Bruno. Resolveu meu problema.

1 curtida