#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"))
Ответ №1:
Не уверен, что это то, что вы ищете. Но один из способов достижения желаемого результата — манипулировать ключами легенды с помощью gtable
:
- Чтобы получить легенду, мы должны сопоставить
lag
ее с эстетикой, напримерcolor
- Используя
scale_color_manual
, мы можем установить цвета наblack
- Отрегулируйте угол и метку ключа легенды
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
бы у нее была шкала. Однако, за исключением текста или символов, это, вероятно, не имело бы особого смысла. (;