首页 > 解决方案 > R:水平条形图(简单甘特图)

问题描述

我有一个如下所示的数据框:

structure(list(time = 1:36, X2018 = c("1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0"), X2019 = c("0", "0", "1", "1", 
"1", "1", "1", "1", "1", "1", "0", "0", "1", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0"), X2020 = c("1", "1", "1", "1", 
"1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0", "0", "0", "0", "0")), row.names = c(NA, -36L), class = "data.frame")

“时间”列是一年中的十年数(= 10 天)。“X2018”列包含 2018 年的数据条目。数据条目是 1(有数据)或 0(没有数据/NA)。

我想创建一个看起来像这样的图,显示具有数据条目的不同年份的几十年:

水平条形图

我尝试使用 ggplot2 生成绘图。我认为条形图不是这里的方法,因为它们可视化从 0 开始的总计数。

我查看了甘特图,但我觉得这太复杂了,我想知道是否有人可以给我一个关于如何解决这个问题或我可以查看哪些包的提示。

标签: rggplot2bar-chart

解决方案


从宽到长重塑数据,然后使用 geom_tiles:

library(ggplot2)
library(data.table)

setDT(dt)

#reshape
plotDat <- melt(df1, id.vars = "time", variable.name = "year")

#pretty xlimits
xlimits <- range(plotDat$time)

# plot tiles
ggplot(plotDat[ value == 1, ], aes(time, year)) +
  geom_tile(fill = "lightblue") +
  scale_x_continuous(limits = xlimits, breaks = seq(xlimits[1], xlimits[2]))

在此处输入图像描述


推荐阅读