将连续的“块”序列可视化为矩形布局

时间:2019-03-14 04:54:42

标签: r ggplot2

我在表中描述了几种类型的“单位”的连续序列(这里将其称为“块”),例如:

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 

在这里,我在组之间留有空格,但实际上这是一个连续的序列(显示组之间的边界会很好,但不是很关键),它会出现在图的“行”中,然后换行到下一个排满时。 我想要得到的最终结果将是这样的: enter image description here
(该可视化类型可能有一些名称-随时编辑标题)
我知道不会有现成的解决方案,但是如果您至少可以建议我应该寻找的方向,那将是非常不错的。我在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()

1 个答案:

答案 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")

enter image description here