Tenho um quadro de dados em R chamado df:
> df
# A tibble: 25 × 3
delta cat Year
<dbl> <chr> <dbl>
1 2.5 A 2019
2 2 A 2024
3 2.6 A 2020
4 4 A 2022
5 4.5 A 2023
6 3 B 2019
7 2.8 B 2024
8 2.95 B 2023
9 2.98 B 2022
10 3.07 B 2020
# ℹ 15 more rows
Criei um gráfico de pontos em R usando ggplot2, mas no eixo y estão os anos:
- Todos eles são NA
- E não são classificados com base na evolução dos anos (ou seja, 2019,...2024)
YEARS <- c(2019,2020, 2022, 2023, 2024)
x=df%>%
mutate_if(is.factor,as.character)%>%
group_by(cat) %>%
arrange(delta,.by_group = TRUE) %>%
mutate(labels = paste0(letters[1:n()], "/",Year))%>%
print(n=30)
x%>%
mutate(Year = factor(Year, levels = rev(YEARS)))%>%
group_by(Year)%>%
arrange(Year)%>%
ggplot(aes(x = delta, y = Year
)) +
geom_point(size = 3) +
geom_label_repel(aes(label = delta), # Add text labels showing `delta`
size = 3, # Adjust text size
box.padding = 0.3, # Padding around text box
point.padding = 0.2, # Padding around points
segment.color = "gray", # Line color
segment.size = 0.5) +
facet_grid(cat ~., scales="free_y") +
scale_y_discrete(labels = \(x) str_extract(x, "(?<=/).*")) +
labs(y =NULL) +
geom_vline(xintercept=0) +
theme_bw() +
theme(legend.position = "none", # Remove the legend
axis.text.x = element_text(angle = 0, hjust = 1), # Rotate x-axis labels
strip.text.y = element_text(size = 8, angle = 0, vjust = 0.5),
axis.text.y = element_text(size = 7),
strip.text = element_text(size = 14), # Increase facet label size
axis.title = element_text(size = 14), # Increase axis title size
axis.text = element_text(size = 10))+ # Increase axis text size
theme(strip.background = element_rect(color="black", fill="gray", size=1.5, linetype="solid"))+
labs(title = "",x = "")
como posso consertar isso?
Dados
df=structure(list(delta = c(2.5, 2, 2.6, 4, 4.5, 3,
2.8, 2.95, 2.98, 3.07, 2.2, 3.3, 3.4, 3.9,5, 3.7, 2.9, 2.9,
2.7, 2.9, 3.6, 2.3, 2.4, 2.3, 2.7), cat = c("A", "A",
"A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C",
"E","E","E","E","E", "D", "D", "D", "D", "D"), Year = c(2019,
2024, 2020, 2022, 2023, 2019, 2024, 2023, 2022, 2020, 2019, 2024,
2020, 2022, 2023, 2019, 2020, 2022, 2023, 2024, 2019, 2022, 2020,
2024, 2023)), row.names = c(NA, -25L), class = c("tbl_df", "tbl",
"data.frame"))
Talvez eu não tenha entendido corretamente a pergunta, mas tentei ordenar os anos no eixo y dentro de cada categoria em relação ao delta.
Eu hipotetizei que não há casal duplicado cat-Year em df. Então eu apenas ordenei em relação ao delta (não há necessidade de fazer isso dentro de grupos, pois se for ordenado globalmente, dentro do grupo também é ordenado) e então criei um fator como seu rótulo de variável com níveis ordenados como no df ordenado. Então, com seu código para plotagem, os anos são ordenados em relação ao delta em cada categoria.
Espero ter entendido o problema!