0

尝试在 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)  

这给出了错误

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

任何帮助深表感谢!

4

2 回答 2

0

我设法从使用 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

对不起,如果我过度解释但我不知道我在做什么,所以我希望我可以帮助那些不知道他们在做什么的人!

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

于 2017-03-10T22:14:23.720 回答
0

这是一个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 包(v0.3.0)于 2019 年 12 月 7 日创建

于 2017-03-10T22:28:41.157 回答