ipeadata-lab / ipeaplot

ipeaplot: criando graficos no padrão editorial do Ipea
https://ipeadata-lab.github.io/ipeaplot/
Other
2 stars 0 forks source link

Warning message: In rbind(test, temp) : number of columns of result is not a multiple of vector length (arg 2) #56

Closed palmaresk8 closed 6 months ago

palmaresk8 commented 6 months ago

Olá. Estou tentando fazer um gráfico de linha, mas com geom_ribbon para mostar intervalos de confiança. Ao fazer isso, eu obtenho a mensagem

Warning message: In rbind(test, temp) : number of columns of result is not a multiple of vector length (arg 2)

E as cores dos intervalos de confiança não respeitam a paleta escolhida (veja abaixo). De fato, não sei se a mensagem e a questão das cores estão relacionadas, mas gostaria de saber como fazer para o geom_ribbon ter a mesma cor da linha.

01b0c439-4f85-4ff5-9939-3177b18f5ece

Para reproduzir:

df_serie = tibble(
  vl_periodo = c(rep(2012, 3), rep(2022, 3)),
  v2007 = rep(c("Masculino", "Feminino", "Total"), 2),
  ind_contrib_prev = c(64, 60, 62, 68, 64, 66),
  ind_contrib_prev_low = c(64, 60, 62, 68, 64, 66) - 0.5,
  ind_contrib_prev_upp = c(64, 60, 62, 68, 64, 66) + 0.5
)

g1 = df_serie |>
  ggplot(aes(
    x = factor(vl_periodo),
    y = ind_contrib_prev,
    group = v2007,
    color = v2007
  )) +
  geom_line(linewidth = 0.6) +
  geom_ribbon(
    mapping = aes(
      ymin = ind_contrib_prev_low,
      ymax = ind_contrib_prev_upp,
      fill = v2007
    ),
    alpha = 0.1,
    linetype = 0,
    show.legend = FALSE
  ) +
  geom_point(size = 1.5, show.legend = FALSE) +
  geom_text(
    mapping = aes(label = scales::comma(ind_contrib_prev, big.mark = ".", decimal.mark = ",", accuracy = 0.1)),
    hjust = 0.5,
    vjust = -0.5,
    check_overlap = TRUE,
    show.legend = FALSE,
    color="black"
  ) +
  scale_color_ipea(palette = "Blue") +
  theme_ipea(
    include_x_text_title = FALSE,
    include_y_text_title = FALSE,
    legend.position = "bottom",
  ) +
  theme(
    legend.title = element_blank(),
    aspect.ratio = aspect.ratio
  ) +
  expand_limits(y = 50) +
  geom_rug(
    data = df_serie |> distinct(vl_periodo),
    mapping = aes(x = as_factor(vl_periodo)),
    inherit.aes = FALSE,
    outside = TRUE,
    sides = "b",
    length = unit(2, "mm"),
    linewidth = 0.25
  ) +
  coord_cartesian(clip = "off")

print(g1)
palmaresk8 commented 6 months ago

Ok, acho que entendi, eu tenho que especificar scale_fill_ipea.

g1 = df_serie |>
  ggplot(aes(
    x = factor(vl_periodo),
    y = ind_contrib_prev,
    group = v2007,
    color = v2007,
    fill = v2007
  )) +
  geom_line(linewidth = 0.6) +
  geom_ribbon(
    mapping = aes(
      ymin = ind_contrib_prev_low,
      ymax = ind_contrib_prev_upp
    ),
    alpha = 0.1,
    linetype = 0,
    show.legend = FALSE
  ) +
  geom_point(size = 1.5, show.legend = FALSE) +
  geom_text(
    mapping = aes(label = scales::comma(ind_contrib_prev, big.mark = ".", decimal.mark = ",", accuracy = 0.1)),
    hjust = 0.5,
    vjust = -0.5,
    check_overlap = TRUE,
    show.legend = FALSE,
    color="black"
  ) +
  scale_color_ipea(palette = "Red-Blue") +
  scale_fill_ipea(palette = "Red-Blue") +
  theme_ipea(
    include_x_text_title = FALSE,
    include_y_text_title = FALSE,
    legend.position = "bottom",
  ) +
  theme(
    legend.title = element_blank(),
    aspect.ratio = aspect.ratio
  ) +
  expand_limits(y = 50) +
  geom_rug(
    data = df_serie |> distinct(vl_periodo),
    mapping = aes(x = as_factor(vl_periodo)),
    inherit.aes = FALSE,
    outside = TRUE,
    sides = "b",
    length = unit(2, "mm"),
    linewidth = 0.25
  ) +
  coord_cartesian(clip = "off")

print(g1)