Duas maneiras de mostrar o progresso do PDI

Author

Steven

Introdução

outro dia, encontrei o forpdi. ferramenta que mostra se a unirio alcança ou não os objetivos estratégicos. Ele parece um TRELLO simplificado e eu acredito que consigo reproduzi-lo no shiny ou no streamlit.

Assim, antes de continuar, queria mostrar um pedaço do forpdi.

A primeira coisa que pensei foi criar um valuebox com o progresso. depois pensei em criar um card com o progresso. Finalmente, pensei em colocar um ggplot no card….. mas antes, preciso fazer um gráfico ggplot do progresso. então, vamos a ele:

O primeiro passo é criar um banco de dados

#Metas Alcançadas
#7.84% das metas estão alcançadas
library(dplyr)
library(ggplot2)

percentage_done = 0.0784
percentual_feito = scales::comma(percentage_done,  accuracy = 0.001, big.mark = "." , decimal.mark = ",")

fake_dat = tibble(
  part = c("Completo", "Incompleto"),
  percentage = c(percentage_done, 1 - percentage_done))

fake_dat$percentage = scales::comma(fake_dat$percentage,  big.mark = "." , decimal.mark = ",")

No código acima, fiz um banco de dados de exemplo e troquei a casa decimal de “.” para “,”. Já podemos fazer o nosso primeiro gráfico.

fake_dat %>%  
  ggplot(aes(x = "", y = percentage, fill = part)) + 
  geom_col(width = .25,position = position_stack(reverse = TRUE)) + 
  scale_fill_manual(
    #values = c("Completo" = "#009E73", "Incompleto" = "grey80")
    values = c("Completo" = "steelblue", "Incompleto" = "tomato")
    
  ) + 
  coord_flip()

Agora, a gente poderia mexer um pouco no tema.

fake_dat %>%  
  ggplot(aes(x = "", y = percentage, fill = part)) + 
  geom_col(width = .25,position = position_stack(reverse = TRUE)) + 
  scale_fill_manual(
    #values = c("Completo" = "#009E73", "Incompleto" = "grey80")
    values = c("Completo" = "steelblue", "Incompleto" = "tomato")
    
  ) + 
  coord_flip() +
  theme_void() +
  theme(
    legend.position = "none",
    plot.title = element_text(
      family = "Source Sans Pro", size = 28, face = "bold"
    ),
    plot.subtitle = element_text(family = "Source Sans Pro", size = 18)
  ) + 
  annotate(
  "text",
  x = 0.95,
  y = 0.95,
  label = glue::glue("{scales::percent(percentage_done)} completo"),
  size = 12,
  family = "Source Sans Pro",
  fontface = "bold",
  color = "black",
  vjust = 0
)+
  labs(
    title = "Metas Alcançadas",
    subtitle = paste0(percentual_feito ," das metas estão alcançadas."),
    y='',
  )

Gauger

Podemos fazer também um gráfico curvado. por exemplo:

#----------------------------------------------------------
# gauge_plot
#----------------------------------------------------------


percentage_done = 0.95

fake_dat = tibble(
  part = c("Complete", "Incomplete"),
  percentage = c(percentage_done, 1 - percentage_done),
  start = lag(percentage, default = 0) * pi,
  end = start + percentage * pi
)
fake_dat
# A tibble: 2 × 4
  part       percentage start   end
  <chr>           <dbl> <dbl> <dbl>
1 Complete       0.95    0     2.98
2 Incomplete     0.0500  2.98  3.14
library(ggforce)
gauge_plot <- fake_dat |>
  ggplot() +
  geom_arc_bar(
    aes(
      x0 = 1,
      y0 = 1,
      fill = part,
      start = start - pi / 2,
      end = end - pi / 2,
      r0 = 0.75,
      r = 1
    )
  ) +
  coord_fixed()
gauge_plot

agora, podemos mexer no tema:

labeled_gauge_plot <- gauge_plot +
  annotate(
    "text",
    x = 1,
    y = 1,
    label = glue::glue("{percentage_done * 100}% complete"),
    size = 16,
    family = "Source Sans Pro",
    fontface = "bold",
    color = "#009E73",
    vjust = 0
  ) +
  labs(
    title = "This is a gauge plot",
    subtitle = "It was created in ggplot and shows you how much of your goal\nyou have already achieved."
  )
labeled_gauge_plot

themed_gauge_plot <- labeled_gauge_plot +
  theme_void() +
  theme(
    legend.position = "none",
    plot.title = element_text(
      family = "Source Sans Pro", size = 28, face = "bold"
    ),
    plot.subtitle = element_text(family = "Source Sans Pro", size = 18)
  )
themed_gauge_plot

themed_gauge_plot +
  scale_fill_manual(
    values = c("Complete" = "#009E73", "Incomplete" = "grey80")
  )