Si je voulais tracer DT où le décalage était représenté par différents angles de flèche, comment puis-je l'afficher dans une légende ?

DT <- data.table(station=c(rep("station1",12),
                           rep("station2",12),
                           rep("station3",12)),
                 month=c(1:12),
                 lag=c(sample(0:2),replace=T))

ggplot() + geom_text(data=DT, 
                     aes(x=month,y=station,
                         angle=lag*45+90,
                         label="\U2192"))

lag_plot

1
Lamees 10 oct. 2020 à 18:57

1 réponse

Meilleure réponse

Je ne sais pas si c'est ce que vous recherchez. Mais une façon d'obtenir le résultat souhaité consiste à manipuler les touches de légende via le gtable :

  1. Pour obtenir une légende, nous devons mapper lag sur une esthétique comme par ex. color
  2. En utilisant scale_color_manual, nous pouvons définir les couleurs sur black
  3. Ajuster l'angle et l'étiquette de la touche de légende
library(ggplot2)
library(dplyr)
library(grid)

DT <- data.frame(station=c(rep("station1",12),
                           rep("station2",12),
                           rep("station3",12)),
                 month=c(1:12),
                 lag=c(sample(0:2),replace=T))

DT$angle <- DT$lag * 45 + 90

p <- ggplot() + 
  geom_text(data =DT, 
            aes(x=month, y=station,
                angle = angle,
                color = factor(lag),
                label = "\U2192")) +
  scale_color_manual(values = rep("black", length(unique(DT$lag))))

# Get gtable
gt <- ggplot2::ggplot_gtable(ggplot2::ggplot_build(p))

# Get indices for guide box and legend keys
idx_guide_box <- which(gt$layout$name == "guide-box")
idx_keys <- which(stringr::str_detect(gt$grobs[[idx_guide_box]]$grobs[[1]]$layout$name, "^key[\\-\\d]+$"))

for (i in seq_along(idx_keys)) {
  angle <- (i - 1) * 45 + 90
  idx_grob <- idx_keys[[i]]
  # Set angle and label
  gt$grobs[[idx_guide_box]]$grobs[[1]]$grobs[[idx_grob]]$rot <- angle
  gt$grobs[[idx_guide_box]]$grobs[[1]]$grobs[[idx_grob]]$label <- "\U2192"
}
grid::grid.draw(gt)

1
stefan 11 oct. 2020 à 06:02