【发布时间】:2025-12-01 02:35:01
【问题描述】:
我有一个数据集,其中包含个人随着时间的推移在哪里工作的信息。更具体地说,我有关于个人在给定工作场所工作的时间间隔的信息。
library('tidyverse')
library('lubridate')
# individual A
a_id <- c(rep('A',1))
a_start <- c(201201)
a_end <- c(201212)
a_workplace <-c(1)
# individual B
b_id <- c(rep('B',2))
b_start <- c(201201, 201207)
b_end <- c(201206, 201211)
b_workplace <-c(1, 2)
# individual C
c_id <- c(rep('C',2))
c_start <- c(201201, 201202)
c_end <- c(201204, 201206)
c_workplace <-c(1, 2)
# individual D
d_id <- c(rep('D',1))
d_start <- c(201201)
d_end <- c(201201)
d_workplace <-c(1)
# final data frame
id <- c(a_id, b_id, c_id, d_id)
start <- c(a_start, b_start, c_start, d_start)
end <- c(a_end, b_end, c_end, d_end)
workplace <- as.factor(c(a_workplace, b_workplace, c_workplace, d_workplace))
mydata <- data.frame(id, start, end, workplace)
mydata_ym <- mydata %>%
mutate(ymd_start = as.Date(paste0(start, "01"), format = "%Y%m%d"),
ymd_end0 = as.Date(paste0(end, "01"), format = "%Y%m%d"),
day_end = as.numeric(format(ymd_end0 + months(1) - days(1), format = "%d")),
ymd_end = as.Date(paste0(end, day_end), format = "%Y%m%d")) %>%
select(-ymd_end0, -day_end)
我想要一个可以看到每个人在每个工作场所工作多长时间以及他们如何四处走动的模式。我尝试绘制geom_segment,因为我有每个地方的个人作品的开始和结束日期的信息。此外,由于同一个人可能在同一个月内在多个地方工作,因此我想使用position_dodge 使其在同一id-time 的不同工作场所重叠时可见。这是在这篇文章中建议的:Ggplot (geom_line) with overlaps
ggplot(mydata_ym) +
geom_segment(aes(x = id, xend = id, y = ymd_start, yend = ymd_end),
position = position_dodge(width = 0.1), size = 2) +
scale_x_discrete(limits = rev) +
coord_flip() +
theme(panel.background = element_rect(fill = "grey97")) +
labs(y = "time", title = "Work affiliation")
我遇到的问题是:(i)position_dodge 似乎不起作用,(ii)我不知道为什么所有的段都被涂成黑色。我希望每个工作场所都有不同的颜色和传奇。
【问题讨论】:
-
,@PaulaSpinola 很高兴看到您在 *.com/questions/69595322/…> 处遵循了我被否决且现已删除的建议以使用
geom_segment。 :-) -
@TarJae 抱歉,我只是对它投了反对票,因为它产生了错误的输出,只是想让下一个人更容易搜索这个主题。使用
geom_segment的想法非常好,谢谢。我在这里对其进行了修改以纠正一些问题,但可能也应该在那里写。对不起!
标签: r ggplot2 position geom-segment