随着时间的推移使用 Presence/absence 的带状图

Stripchart using Presence/absence over time

尝试在 R 中制作与此类似的带状图:

这是一些示例数据 (df),其中对于任何给定的一天,它给出了个人是在场 (1) 还是缺席 (0)。

Day  ID1  ID2  ID3
1    1    1    0
2    0    1    1
3    0    0    0
4    1    1    1
5    1    1    1   

我试过:

stripchart(df)

这是胡说八道

也试过:

stripchart(df ~ rownames(df)  

给出错误

我觉得有更好的方法来为此格式化数据,但我不知道怎么做!

非常感谢任何帮助!

我设法从使用 ggplot() 做了类似事情的人那里得到了一些代码

数据需要采用 (df) 的形式:

Date        ID   Name
2016-08-11  1    Ray1
2016-08-12  2    Ray2
2016-08-12  3    Ray3
... etc

带有个人出现的日期(或日期时间)、个人的 ID 号和个人的姓名(如果您希望轴具有名称而不是 ID 号)

日期需要采用 POSIXct 格式

代码如下(仅针对本回答中的3行示例数据):

plot<-ggplot()+ geom_point(data=df, aes(df$Date, y=ID,colour = Name),shape = 19, size = 2)+ scale_y_continuous(breaks=1:3, labels=c("Ray1", "Ray2", "Ray3"))+ scale_x_datetime(date_minor_breaks = "day")+ xlab("Date") + ylab(NULL)+ theme(legend.position="none")+scale_colour_manual(values = c("black", "black"), name = "Ray",breaks = c("Ray1", "Ray2", "Ray3") + theme(legend.position="none"))

其中:

scale_y_continuous(breaks=1:3, labels=c("Ray1", "Ray2", "Ray3"))

给出将 y 轴分成 3 个个体并用他们的名字标记他们

scale_x_datetime(date_minor_breaks = "day")

给出每日休息时间的 x 轴

scale_colour_manual(values = c("black", "black"), name = "Ray",breaks = c("Ray1", "Ray2", "Ray3") + theme(legend.position="none")

将点涂成黑色,否则由于某种原因它会变成彩虹。不过看起来很酷:P

抱歉,如果我过度解释了,但我不知道自己在做什么,所以我希望我能帮助那些不知道自己在做什么的人!

如果有人对如何在带状图中制作这种风格的图表有任何其他建议,我仍然很想知道!

这是一个使用 tidyr 重塑数据然后 lattice 绘制条件带状图的解决方案。

dd_long <- tidyr::gather(df, id, present, -Day)
dd_long$present <- factor(dd_long$present, labels = c("Not present", "Present"))

lattice::stripplot(present ~ Day | id, data = dd_long, layout = c(3, 1))

更新答案

其实我觉得这样更合适:

library(tidyr)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(lattice)

df <- data.frame(Day = 1:5,
                 ID1 = c(1, 0, 0, 1, 1),
                 ID2 = c(1, 1, 0, 1, 1),
                 ID3 = c(0, 1, 0, 1, 1))

dd_long <- gather(df, id, present, -Day) %>%
  filter(present == 1)

stripplot(id ~ Day, data = dd_long)

reprex package (v0.3.0)

于 2019-12-07 创建