随着时间的推移使用 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 创建
尝试在 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 创建