R Data Viz - 可以使用网格、ggplot 或其他数据可视化库创建矩形网格

R Data Viz - possible to create a grid of rectangles with grid, ggplot or another data viz library

所附图片是我在 excel 中快速模拟的屏幕截图,但是我需要基于此布局的可重现数据可视化,这是一个宽度不同的矩形网格。假设我拥有创建此类图形所需的所有矩形的必要坐标数据。

是否可以在 R 中使用 ggplot2 或任何其他数据可视化库来做这样的事情?我的后备方案是使用 Javascript / D3 创建自定义解决方案,但是我们强烈的初始偏好是找到适用于 R 的解决方案。

编辑: This link 使用 gridgrid.rect 在笛卡尔网格上创建矩形。如果没有更好的替代方案,这似乎是一个不错的基准选项。

Edit2: 下面是一些数据的小例子:

> dput(zed)
structure(list(time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
), a1 = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), a2 = c(4, 4, 5, 
5, 5, 5, 5, 6, 6, 6, 6, 6), a3 = c(7, 7, 7, 8, 8, 8, 9, 9, 9, 
10, 10, 10), a4 = c(11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 
13)), class = "data.frame", row.names = c(NA, -12L))
> zed
   time a1 a2 a3 a4
1     1  1  4  7 11
2     2  1  4  7 11
3     3  1  5  7 11
4     4  1  5  8 11
5     5  2  5  8 11
6     6  2  5  8 12
7     7  2  5  9 12
8     8  2  6  9 12
9     9  3  6  9 13
10   10  3  6 10 13
11   11  3  6 10 13
12   12  3  6 10 13

a1, a2, a3, a4 代表 4 行,这些行的 y 值无关紧要。 time 表示线性 x 值。对于每一行(例如 a1),当值从一个数字变为另一个数字时,矩形应该结束。 a1,那么第一行将有 3 个矩形,每个矩形都有 width == 4。列中的数字也可以作为矩形中显示的文本。

我正在积极研究使用 ggplot2::geom_rect 的解决方案(感谢您对此的正确指导),如果我找到可靠的解决方案,我会 post 进行更新。

尝试这样的事情:

library(ggplot2)
library(dplyr)
#Code
zed %>% pivot_longer(-time) %>%
  ggplot(aes(x=factor(time),y=name,
             fill=value))+
  geom_tile()+
  xlab('Time')+ylab('Var')+
  scale_fill_gradient2()

输出: