Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建一个曲线图,突出显示表中任何一天按组存在记录的周数_R_Ggplot2_Data.table_Ggvis - Fatal编程技术网

R 创建一个曲线图,突出显示表中任何一天按组存在记录的周数

R 创建一个曲线图,突出显示表中任何一天按组存在记录的周数,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",

假设data.table
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())