我需要用ggplot2创建这个图形之王,我用geom_bar尝试了很多东西,geom_histogram没有任何成功。 有什么建议吗?
此致
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))
)
答案 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())
要更改条形图的厚度,您可以改变expand_limits()
。
答案 1 :(得分:1)
您正在寻找geom_rect
,并且像ggplot2
问题一样,它是一个
伪装的数据操作问题。您想制作一个可以输入geom_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) )
关键是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
。
我明白了,这就是我理解你想要的。其余的只是化妆品。