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 使用 grid
和 grid.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()
输出:
所附图片是我在 excel 中快速模拟的屏幕截图,但是我需要基于此布局的可重现数据可视化,这是一个宽度不同的矩形网格。假设我拥有创建此类图形所需的所有矩形的必要坐标数据。
是否可以在 R 中使用 ggplot2
或任何其他数据可视化库来做这样的事情?我的后备方案是使用 Javascript
/ D3
创建自定义解决方案,但是我们强烈的初始偏好是找到适用于 R 的解决方案。
编辑: This link 使用 grid
和 grid.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()
输出: