我有一個資料集,其中包含個人在一段時間內作業的資訊。更具體地說,我有關于個人在給定作業場所作業的時間間隔的資訊。
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重疊
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) 我不知道為什么所有段都被涂成黑色。我希望每個作業場所都有不同的顏色和傳說出現。
uj5u.com熱心網友回復:
如果您colour = workplace在aes()映射中包含geom_segment顏色和圖例以及一些閃避,但它不能正常作業(它看起來position_dodge只適用于x而不適用于xend......?這似乎是一個錯誤,或者至少是一個“不合適的” “,在position_dodge...
但是,替換geom_segment為適當的使用geom_linerange似乎確實有效:
ggplot(mydata_ym)
geom_linerange(aes(x = id, ymin = ymd_start, ymax = ymd_end, colour = workplace),
position = position_dodge(width = 0.1), size = 2)
scale_x_discrete(limits = rev)
coord_flip()
(省略了一些切向分量)。
以前在這里記錄了類似的方法- 一旦colour=映射得到處理,您的問題幾乎重復......
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321487.html
上一篇:如何合并ggpplot中的圖例
