我在表中描述了几种类型的“单位”的连续序列(这里将其称为“块”),例如:
df1 <- read.table(header=T,text='
Group nA nB nC
Group1 2 3 1
Group2 1 4 2
Group3 1 5 2
Group4 4 2 2
Group5 6 6 2
')
即2个类型为A
的块,然后3个类型为B
的块,1个类型为C
的块,依此类推。我想通过一种矩形地图将其可视化(如果您曾经例如看到硬盘驱动器扇区的地图。
在符号图中,看起来像这样:
AABBBC ABBBBCC ABBB
BBCC AAAABBCC AAAAA
ABBBBBBCC
在这里,我在组之间留有空格,但实际上这是一个连续的序列(显示组之间的边界会很好,但不是很关键),它会出现在图的“行”中,然后换行到下一个排满时。
我想要得到的最终结果将是这样的:
(该可视化类型可能有一些名称-随时编辑标题)
我知道不会有现成的解决方案,但是如果您至少可以建议我应该寻找的方向,那将是非常不错的。我在R
中描述了此示例,但不要介意其他工具(例如,基于d3.js
的工具会很酷)
tmp UPD。根据PoGibas的回答,只需添加一些内容即可使其“包装”:
size1 <- 17L
df2$row <- ceiling(df2$X / size1)
df2$pos <- df2$X - df2$row*size1
ggplot(df2, aes(pos, row, fill = L)) +
geom_tile(color = NA) +
scale_fill_manual(values = c("green", "yellow", "red")) +
theme_void() +
theme(legend.position = "none")+
scale_y_reverse()
答案 0 :(得分:0)
首先,您必须“扩展”原始数据(df1
)。为此,我们可以使用rep
-重复输入 n 次。
# Create matrix of entries
M <- t(matrix(LETTERS[1:3], 5, 3, byrow = TRUE))
# [,1] [,2] [,3] [,4] [,5]
# [1,] "A" "A" "A" "A" "A"
# [2,] "B" "B" "B" "B" "B"
# [3,] "C" "C" "C" "C" "C"
# Repeat entry in matrix M by transposed original matrix
df2 <- data.frame(L = rep(M, t(df1[, 2:4])))
# Add position on x axis
df2$X <- 1:nrow(df2)
# head(df2)
# L X
# 1 A 1
# 2 A 2
# 3 B 3
# 4 B 4
# 5 B 5
# 6 C 6
# Plot using geom_tile
library(ggplot2)
ggplot(df2, aes(X, 0, fill = L)) +
geom_tile(color = NA) +
scale_fill_manual(values = c("green", "yellow", "red")) +
theme_void() +
theme(legend.position = "none")