我想用ggplot2画一条时间轴。一些事件同时发生,ggplot2倾向于将它们绘制在彼此的顶部,这样只有一个事件保持可见。
以下是事件的示例表:
library(tidyverse)
events <-
tribble(
~group, ~name, ~start, ~end, ~color,
"group1", "first event", "2023-09-19", "2023-11-19", "color1",
"group1", "in parallel", "2023-09-19", "2023-11-19", "color2",
"group1", "later", "2024-09-01", "2024-09-21", "color1"
) |>
mutate(start=lubridate::ymd(start),
end=lubridate::ymd(end))
以下是到目前为止的ggplot2命令:
ggplot(events,
aes(xmin=start, xmax=end,
ymin=group, ymax=group,
col=color)) +
scale_x_date() +
geom_rect(linewidth=3)
请注意,第二个事件绘制在第一个事件的顶部,这样用户就看不到它:
plot of the timeline with first event not being visible
如何使这两个事件都可见?
我尝试了ggplot2提供的所有位置调整,希望它们中的任何一个都能同时显示两个事件的正确开始日期和结束日期。position_dodge()
听起来像是一个自然的选择,但是它改变了x轴上事件的位置,使得绘图变得不正确。
1条答案
按热度按时间fslejnso1#
一种选择是将
geom_linerange
与position_dodge
一起使用: