用ggplot2计时的聚类图

时间:2017-06-17 15:26:40

标签: r ggplot2

我需要用ggplot2创建这个图形之王,我用geom_bar尝试了很多东西,geom_histogram没有任何成功。 有什么建议吗?

此致

enter image description here

dataset <- data.frame(
      day=seq(from=as.Date("2010-01-01"), to=as.Date("2010-03-01"), by = 1),
      cluster=factor(sample(x=1:3,size = 60,replace = TRUE))
    )

2 个答案:

答案 0 :(得分:2)

您也可以使用geom_tile而不转换数据集:

ggplot(dataset) + geom_tile(aes(x=day, y = 1,fill=cluster)) + expand_limits(y=c(-2,4)) + 
  theme(axis.title.y=element_blank(),
  axis.text.y=element_blank())

enter image description here

要更改条形图的厚度,您可以改变expand_limits()

答案 1 :(得分:1)

您正在寻找geom_rect,并且像ggplot2问题一样,它是一个 伪装的数据操作问题。您想制作一个可以输入geom_rect的数据框,因此您需要xminxmax ......

我在这里根据您使用的样本数据做出一些假设,您可能需要根据您拥有的实际数据进行调整。

dataset %>% 
  mutate( step = cumsum( lag(cluster, 1, default = TRUE) != cluster )) %>% 
  group_by(step) %>% 
  summarise( cluster = first(cluster), date_min = min(day) ) %>%
  mutate( date_max = lag(date_min, 1)) %>% 
  select( -step ) %>% 
  ggplot() + geom_rect( aes(xmin=date_min, xmax = date_max, ymin=0, ymax=1, fill = cluster, col = cluster) )

关键是step变量,每次更改cluster列时,该变量都会递增:

dataset %>% 
  mutate( step = cumsum( lag(cluster, 1, default = TRUE) != cluster )) %>% 
  head
         day cluster step
1 2010-01-01       1    0
2 2010-01-02       3    1
3 2010-01-03       3    1
4 2010-01-04       2    2
5 2010-01-05       3    3
6 2010-01-06       2    4

然后你group_by这个step变量。其余的是经典的dplyr,然后是ggplot2

我明白了,这就是我理解你想要的。其余的只是化妆品。

enter image description here