R 带有ggplot2的时序聚类图

R 带有ggplot2的时序聚类图,r,ggplot2,R,Ggplot2,我需要用ggplot2创建这个图形之王,我用geom_条、geom_直方图做了很多尝试,但都没有成功。 有什么建议吗 问候 dataset您正在查找的是geom\u rect,与往常一样,在ggplot2问题中,它是一个 变相的数据操纵问题。你想制作一个数据帧,你可以输入到geom\u rect,所以你需要xmin,xmax 我在这里根据您使用的样本数据做一些假设,您可能需要根据您拥有的真实数据进行调整 dataset %>% mutate( step = cumsum( lag(

我需要用ggplot2创建这个图形之王,我用geom_条、geom_直方图做了很多尝试,但都没有成功。 有什么建议吗

问候


dataset您正在查找的是
geom\u rect
,与往常一样,在
ggplot2
问题中,它是一个 变相的数据操纵问题。你想制作一个数据帧,你可以输入到
geom\u rect
,所以你需要
xmin
xmax

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

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) )
键是
步骤
变量,每次更改
集群
列时该变量都会递增:

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
然后,您可以通过
步骤
变量对您进行分组。其余的是经典的dplyr,然后是
ggplot2

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


您也可以使用
geom\u 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())


要更改棒的厚度,您可以更改
扩展限制()。我总是忘记geom_tile:-)@RomainFrancois,谢谢!虽然在有大量数据的情况下,我觉得您的解决方案更可取,因为它没有像
geom_tile
中那样每天绘制一个值,而是将连续的组组合在一起,这可能会使pdf等格式的渲染效果更好,因为添加到绘图中的内容更少。
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())