R 创建一个曲线图,突出显示表中任何一天按组存在记录的周数
假设data.tableR 创建一个曲线图,突出显示表中任何一天按组存在记录的周数,r,ggplot2,data.table,ggvis,R,Ggplot2,Data.table,Ggvis,假设data.tabledt如下所示: library(data.table) dt <- data.table(grp = c("01", "01","01", "01", "01", "01", "01", "01", "02", "02", "02",
dt
如下所示:
library(data.table)
dt <- data.table(grp = c("01", "01","01", "01", "01", "01", "01", "01", "02", "02", "02",
"03", "03", "03",
"04", "04", "04", "04"),
date = c("2012-04-18", "2012-04-19","2012-04-30", "2012-05-10", "2012-06-23", "2012-06-25",
"2012-07-05", "2012-07-06",
"2012-04-07", "2012-04-19", "2012-04-05",
"2012-04-04", "2012-04-22", "2012-04-25",
"2012-05-19", "2012-06-05", "2012-06-26", "2012-06-27"))
> dt
grp date
1: 01 2012-04-18
2: 01 2012-04-19
3: 01 2012-04-30
4: 01 2012-05-10
5: 01 2012-06-23
6: 01 2012-06-25
7: 01 2012-07-05
8: 01 2012-07-06
9: 02 2012-04-07
10: 02 2012-04-19
11: 02 2012-04-05
12: 03 2012-04-04
13: 03 2012-04-22
14: 03 2012-04-25
15: 04 2012-05-19
16: 04 2012-06-05
17: 04 2012-06-26
18: 04 2012-06-27
现在我的情节是这样的:
如何将绘图改进为所需的绘图?这对您有用吗?对于
dt
中的每个日期,它都会获取它所处的一周的开始和结束时间。然后为每个开始/结束周组合绘制一条线段。根据亨里克的评论,使用了地板日期
/天花板日期
。我需要将as.Date
设置为天花\u日期
,因为它将一周的时间舍入到20小时,所以返回一个类POSIXct
library(lubridate)
dt$start_week <- floor_date(as.Date(dt$date), unit = "week")
dt$end_week <- as.Date(ceiling_date(as.Date(dt$date), unit = "week"))
ggplot(dt, aes(y = grp)) + geom_segment(aes(x = start_week, xend = end_week, yend = grp)) +
geom_text(aes(x = as.Date(date), label = grp), nudge_x = 3, size = 5) +
theme_bw()+
theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))+
scale_x_date('Date', date_breaks = '7 days', expand = c(0, 2)) +
scale_color_brewer(palette = 'Set3') +
theme(axis.line.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank())
库(lubridate)
dt$start\u week,因此绘图中的每一行表示单独的组grp
。我的日期间隔为7天,即一周,因此如果某一周我有任何一天的记录,我想强调整个星期,而不仅仅是那一天。你愿意有这样一个情节吗?@agerom我可以用一条线来连接周末,比如说从周日到周六,其中有一个日期,但不是根据链接中的图表。就像把两个点连在一起我明白你的意思。。。让我仔细考虑一下,然后再回复您。既然您装载了润滑油,那么您最好使用地板日期(date,unit=“week”)
和天花板日期(date,unit=“week”)
。您也可以使用geom_rect
来获得一个长方体形状,而不是使用几何分段,很好,我不知道那些函数<代码>天花板日期
返回一个POSIXct
…知道为什么吗?我想我总是可以把它围成.Date,但是看起来很奇怪,floor\u Date
给了我一个Date
类,但是天花\u Date
没有。ggplot(dt,aes(y=grp))+geom\u段(aes(x=start\u week,xend=end\u week,yend=grp))+geom\u文本(aes(x=as.Date,label=grp),轻推x=3,大小=5)+主题(axis.text.x=element\u text(angle=90,hjust=1,vjust=0.5))+scale\u x\u date('date',date\u breaks='7天',expand=c(0,2))+scale\u color\u brewer(palete='Set3')+主题(axis.line.y=element\u blank(),axis.text.y=element\u blank(),axis.ticks.y=element\u blank())
这给出了我想要的,但X中的标签仍然不清晰可见,有人能帮我旋转标签吗
library(lubridate)
dt$start_week <- floor_date(as.Date(dt$date), unit = "week")
dt$end_week <- as.Date(ceiling_date(as.Date(dt$date), unit = "week"))
ggplot(dt, aes(y = grp)) + geom_segment(aes(x = start_week, xend = end_week, yend = grp)) +
geom_text(aes(x = as.Date(date), label = grp), nudge_x = 3, size = 5) +
theme_bw()+
theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))+
scale_x_date('Date', date_breaks = '7 days', expand = c(0, 2)) +
scale_color_brewer(palette = 'Set3') +
theme(axis.line.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank())