Есть ли способ включить разные углы символа в легенду в R?

#r #ggplot2

#r #ggplot2

Вопрос:

Если бы я хотел построить график DT, где задержка была представлена разными углами стрелки, как я могу показать это в легенде?

 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:

Не уверен, что это то, что вы ищете. Но один из способов достижения желаемого результата — манипулировать ключами легенды с помощью gtable :

  1. Чтобы получить легенду, мы должны сопоставить lag ее с эстетикой, например color
  2. Используя scale_color_manual , мы можем установить цвета на black
  3. Отрегулируйте угол и метку ключа легенды
 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. Спасибо! Это решает мою проблему. Есть ли способ сделать это без использования цвета? Я экспериментировал с вашим кодом, и если я удалил цвет, то «направляющая рамка» не существовала в gtable.

2. @someonesomeo Да. Конечно, мы можем обойтись без цвета. Смотрите мое редактирование. Это просто для получения легенды (как вы сами поняли: без использования цветных aes нет направляющей.) Жизнь была бы намного проще, если angle бы у нее была шкала. Однако, за исключением текста или символов, это, вероятно, не имело бы особого смысла. (;