使用 ggplot 在 R 中“包装”热图列

问题描述 投票:0回答:1

我正在使用 RStudio 创建搁架单元中的对象热图。 IRL 货架的配置方式是,一列从上到下是#1-8 货架,下一列从上到下是#9-16 货架,依此类推,总共 54 个货架单元,重复 6 个货架过道。我正在尝试在 R 中创建一个视觉布局,模仿数据集的相同设置,其中包括行号、货架号和该行货架的对象计数的变量。我希望热图“换行”,以便有一个列映射货架 1-8,然后是一个列映射货架 9-16,依此类推。这可能吗?下面以一段数据为例:

# A tibble: 274 × 3
# Groups:   Row [6]
     Row Shelf count
   <dbl> <dbl> <int>
 1     1     1     4
 2     1     2     5
 3     1     3     2
 4     1     4     4
 5     1     5     3
 6     1     6     1
 7     1     7     6
 8     1     8     7
 9     1     9     9
10     1    10     3
# ℹ 264 more rows

我有一列完整货架过道的热图代码:

  ggplot(data = dupesSorted %>% filter(Row==1),
       aes(x = Row, y = Shelf, fill = count)) +
  geom_tile() + 
  scale_fill_continuous(low = 'yellow', high = 'red', na.value = 'gray')+
  geom_text(aes(label = count))+
    scale_y_reverse(breaks = seq(1, 54, by = 1))+
  scale_x_continuous(breaks = seq(1, 6, by = 1))

这个代码用于我希望初始列的单独热图:

  ggplot(data = dupesSorted %>% filter(Row==1, Shelf<8),
       aes(x = Row, y = Shelf, fill = count)) +
  geom_tile() + 
  scale_fill_continuous(low = 'yellow', high = 'red', na.value = 'gray')+
  geom_text(aes(label = count))+
    scale_y_reverse(breaks = seq(1, 8, by = 1))+
  scale_x_continuous(breaks = seq(1, 6, by = 1))

  

这是第二个代码片段的输出:heatmap 1

如果可能的话,我想做的是创建一个相同比例的热图,以 8 列的形式遍历所有 54 个货架。

我尝试通过添加使用facet_wrap()函数

 facet_wrap(~Shelf, ncol=6)
到 ggplot 函数,但这将可视化分为 54 个单独的框,一个用于每个架子,然后将那些可视化分为 6 列。有没有一种方法可以创建一个连续的可视化,但以指定的时间间隔中断到新列?

r ggplot2 heatmap
1个回答
0
投票
dupesSorted <- data.frame(
  Row = rep(1:6, each = 54),
  Shelf = rep(1:54, times = 6),
  count = rpois(54*6, 7)
)

dupesSorted |> 
  mutate(x_pos = (Shelf - 1) %/% 8 + 1,
         y_pos = (Shelf - 1) %% 8 + 1) |>
  ggplot(aes(x_pos, y_pos, fill = count)) +
  geom_tile() +
  scale_fill_continuous(low = 'yellow', high = 'red', na.value = 'gray')+
  geom_text(aes(label = count))+
  scale_y_reverse(breaks = seq(1, 54, by = 1))+
  scale_x_continuous(breaks = seq(1, 6, by = 1)) +
  facet_wrap(~Row)
© www.soinside.com 2019 - 2024. All rights reserved.