Boa noite, Joel!
Cara, não é muito complicado não. O segredo é justamente tentar pensar nas camadas.
Você precisa de uma camada que represente o 100%, então o que fiz foi criar uma coluna com dplyr::mutate
representando isso.
Para realizar o exercício digitei os valores que estão no gráfico, porém, recomendo que quando fizer perguntas, forneça um mínimo exemplo reprodutível, assim fica mais fácil de alguém ajudar.
Sem dúvidas que devem existir outras formas de resolver, mas segue minha solução:
# Carregar pacotes necessários --------------------------------------------
# if(!require("pacman")) install.packages("pacman")
# pacman::p_load(tibble, dplyr, ggplot2, scales)
# carregar apenas pipe
'%>%' <- magrittr::`%>%`
# Gerar base de exemplo ---------------------------------------------------
base_exemplo <-
tibble::tribble(
~bloco, ~ocupacao,
"bloco_1", "0.65",
"bloco_2", "0.675",
"bloco_3", "0.684",
"bloco_4", "0.637"
) %>%
# corrigindo tipo de coluna
dplyr::mutate(ocupacao = as.numeric(ocupacao))
# verificando tipos
dplyr::glimpse(base_exemplo)
#> Rows: 4
#> Columns: 2
#> $ bloco <chr> "bloco_1", "bloco_2", "bloco_3", "bloco_4"
#> $ ocupacao <dbl> 0.650, 0.675, 0.684, 0.637
# Visualizar dados --------------------------------------------------------
base_exemplo %>%
# criar coluna de 100%
dplyr::mutate(ocup_total = 1) %>%
# plotar
ggplot2::ggplot() +
# base com os percentuas
ggplot2::geom_col(ggplot2::aes(x = ocupacao,
y = bloco),
fill = "#BBE24A",
color = "black",
size = .5) +
# base de 100%
ggplot2::geom_col(ggplot2::aes(x = ocup_total,
y = bloco),
alpha = 0,
color = "black",
size = .8) +
# rótulos
ggplot2::geom_text(ggplot2::aes(x = ocupacao,
y = bloco,
label = scales::percent(ocupacao,
accuracy = .1),
hjust = 1.2),
fontface = "bold",
size = 5) +
# eixos e título
ggplot2::labs(x = "", y = "") +
ggplot2::ggtitle("Ocupação por BLOCO",
subtitle = "MZ-2 - 2021-06-16 Total ocupação 66%") +
# Perfurmaria
# "gruda" as barras no eixo e formata o eixo x como percentual
ggplot2::scale_x_continuous(expand = ggplot2::expansion(0,0),
labels = scales::percent_format()) +
# aplica um tema
ggplot2::theme_minimal()+
# aplica ajustes adicionais
ggplot2::theme(
# deixa o título em negrito
plot.title = ggplot2::element_text(face = "bold"),
# deixa os eixos em negrito
axis.text = ggplot2::element_text(face = "bold"),
# coloca uma linha reta de tamanho '1' no eixo y
axis.line.y = ggplot2::element_line(size = 1),
# ajusta as margens
plot.margin = ggplot2::unit(c(1,1,1,1), "cm")
)
Created on 2021-06-16 by the reprex package (v2.0.0)
Espero que ajude.
Abraços.