首页 > 解决方案 > ggplot时间序列间隔堆积条

问题描述

我有一个庞大的数据文件,我按人将其分解为日块,然后绘制白天发生的事件以及这些事件的持续时间(A、B 或 C)

数据结构如下: t_z 是行之间的间隔, period 是事件变量,这个例子是一个人一天(实际数据是 xdays xpersons)

intervals <- c(0,5.1166667,6.2166667,3.5166667,0.06666667,3.0666667,6.3,
               2.3833333,0.06666667,4.7,18.666667,17.383333,21.533333,
               0.1,0.08333333,0.85)
period <- c("C",    "B",    "A",    "B",    "C",    "B",    "C",    "B",
            "C",    "B",    "C",    "B",    "C",    "B",    "C",    "B")
i <- as.data.frame(intervals)
p <- as.data.frame(period)
d <- cbind(i,p)

获得条形图很容易,但它按天将所有“周期”堆叠成块:

d$id<-1
e <- ggplot(d,aes(id))
e + geom_bar(aes(fill=period))

时间数据的简单聚合堆积条: 时间数据的简单聚合堆积条

但是,我希望每个“周期”都可以离散地表示,并用它的大小来表示:

周期作为离散堆叠块示例: 周期作为离散堆叠块示例

谢谢YBS,但你的方法很接近,但周期的大小不正确有什么想法吗?第一个 C=5 和第一个 A=5 大小不一样?

intervals <- c(5, 15, 5, 3,7,3,6, 2)
period <- c("C","B","A","B","C","B","C","B") 

d <- data.frame(intervals,period)
colors=c("red","blue","green")
dc <- data.frame(period=unique(d$period),colors)
d2 <- d %>% mutate(nid = paste0(d$period,'_',row_number()))
d3 <- left_join(d2,dc, by="period")
d3$id<-1

e <- ggplot(d3,aes(x=id, y=intervals)) +
  geom_col(aes(fill=nid)) 
e + scale_fill_manual(name='period', labels=d3$period, values=d3$colors )

块大小与其间隔值不成比例

标签: rggplot2

解决方案


诀窍是newid用所有离散值创建一个,然后通过 恢复到初始周期值scale_fill_manual。您可以使用coord_flip()使其水平并根据需要更改图例位置。也许这是期望的输出。

intervals <- c(0, 5.1166667, 6.2166667, 3.5166667,0.6666667,3.0666667,6.3, 2.3833333)
               #,0.06666667 , 4.7,18.666667,17.383333,21.533333, 0.1,0.08333333,0.85)
period <- c("C",    "B",    "A",    "B",    "C",    "B",    "C",    "B") 
            # ,"C",    "B",    "C",    "B",    "C",    "B",    "C",    "B")

d <- data.frame(intervals,period)

colors=c("red", "blue","green")

dc <- data.frame(period=unique(d$period),colors)

d2 <- d %>% mutate(nid = paste0(d$period,'_',row_number()))

d3 <- left_join(d2,dc, by="period")

d3$id<-1

e <- ggplot(d3,aes(x=id, y=intervals)) +
       geom_col(aes(fill=nid)) 
e + scale_fill_manual(name='period', labels=d3$period, values=d3$colors )

输出


推荐阅读