随着时间的推移使用存在/不存在的带状图

时间:2017-03-10 05:28:08

标签: r stripchart

尝试在R中制作类似于此的条形图:

Example stripchart

以下是一些示例数据(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)  

哪会出错?

我觉得有一种更好的格式化数据的方法,但我不知道如何!

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我设法从使用ggplot()

做类似事情的人那里得到了一些代码

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

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

个人所在的日期(或日期时间),个人的身份证号码和个人姓名(如果您希望轴具有姓名而不是身份证号码)

日期必须采用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轴分成三个个体,并用它们的名称标记它们

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

很抱歉,如果我解释过但我不知道我在做什么,所以我希望我能帮助别人不知道他们在做什么!

如果有人对如何在条形图中执行此图形样式有任何其他建议,我仍然想知道!

答案 1 :(得分:0)

这是一个解决方案,使用tidyr重塑数据,然后lattice绘制条件stripplots。

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))

enter image description here