r - 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 开始的总计数。
我查看了甘特图,但我觉得这太复杂了,我想知道是否有人可以给我一个关于如何解决这个问题或我可以查看哪些包的提示。
解决方案
从宽到长重塑数据,然后使用 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]))
推荐阅读
- c# - 如何使相机具有与对象相同的旋转但具有偏移(Unity)
- python - Henon系统的分岔图
- javascript - Redux Toolkit createAsyncThunk 问题:异步调度调用后状态更新?
- sql - 将重复行作为一个 SQL 返回
- amazon-web-services - 有什么方法可以获取 EKS 中的部署列表?
- cassandra - 用另一列中的值初始化列表
- jdbc - 如何在 ubuntu OS 中将 xampp 服务器连接到 Eclipse?
- haskell - haskell中的两个指针方法
- c - C中这些数据变量声明差异的原因是什么
- angular - 仅在服务器上获取带有可观察值但在本地没有的错误(:NullInjectorError:没有e的提供者!)