将树状图转换为 ggplot

Converting treemap to ggplot

好消息:我可以使用 treemap 包创建漂亮的树状图。

数据:

forTm <- structure(list(
  UnitGroup = c("1N", "BHU", "CSU", "ED", "Med/Surg", "Med/Surg", "Telemetry", 
            "Telemetry", "Telemetry", "Telemetry", "Telemetry"), 
  Unit = c("A", "B", "C", "ED", "D", "E", "F", "G", "H", "I", "J"),
  Count = c(1L, 1L, 1L, 1L, 15L, 10L, 5L, 2L, 3L, 8L, 4L)), 
  class = c("data.frame"), 
  row.names = c(NA, -11L),
  .Names = c("UnitGroup", "Unit", "Count"))

树状图:

library(treemap)
tm <- treemap(forTm,
          index = c("UnitGroup", "Unit"),
          vSize = "Count",
          vColor = "Count",
          type = "dens",
          palette = "YlGnBu",
          title = "# Patients Sample Title",
          aspRatio = (1.5),
          fontsize.labels = c(16, 12),
          fontsize.title = 16,
          bg.labels = "white",
          border.lwds = c(5,0))

问题:class(tm) 是一个列表,我需要在包含多个 ggplot 的页面上绘制树状图。我预计最终用户需要 add/rearrange 这些图,所以我想要一个相对灵活的解决方案。

目标:将树状图插入以下仪表板:

#just stand-ins for the plots
samplePlot <- grid.rect(gp = gpar(fill = "grey")) 
treemapHere <- grid.rect(gp = gpar(fill = "blue")) 

grid.arrange(samplePlot, # plot 1
         treemapHere, # plot 2
         samplePlot, # plot 3
         layout_matrix = rbind(c(3, 2), c(1, 1)),
         top = textGrob("Sample Title", 
                        gp = gpar(margin = margin(10, 0, 10, 0))),
         heights = c(5, 5))

但解决方案需要足够灵活,以便我可以轻松地add/rearrange绘图,例如如下:

grid.arrange(samplePlot, # plot 1
         samplePlot, # plot 2
         samplePlot, # plot 3
         samplePlot, # plot 4
         treemapHere, # plot5
         layout_matrix = rbind(c(1, 2, 3), 
                               c(4, 5, 5)),
         top = textGrob("Sample Title", 
                        gp = gpar(margin = margin(10, 0, 10, 0))),
         heights = c(5, 5))

理想情况下,我会找到一种方法将树状图重新创建为 ggplot,因为我非常熟悉 ggplot 的语法,所以我很容易标准化 sheet 的样式。但如果没有办法做到这一点,我会接受任何解决方案(将树图保存为 grob?),让我可以轻松地在我的 ggplots 页面中重新排列此图。

到目前为止我尝试了什么:老实说,不多。 Google 不是我的朋友。我发现的唯一建议是使用 treemapify,我不能为这个特定项目做。

如果你一步步用ggplot重建树状图会怎样?例如

library(tidyverse)
treemapHere <- ggplot(tm$tm, 
   aes(xmin=x0+w, xmax=x0, ymin=y0+h, ymax=y0, fill=ifelse(level==1, NA, color), fill = vSize)) + 
  scale_fill_identity() + 
  geom_rect(aes( size=I((2:1)[level])), color="#303030") + 
  coord_fixed(0.75) + 
  guides(size="none") + 
  cowplot::theme_nothing() + 
  geom_text(aes(x0+w/2, y0+h/2, label=Unit, size=I(scales::rescale(vSize, c(2.5, 3))))) + 
  geom_label(aes(x, y, label=UnitGroup, size=I(scales::rescale(vSize, c(2.5, 7)))), tm$tm %>% group_by(UnitGroup) %>% summarise(x=mean(x0+w/2), y=mean(y0+h/2), vSize=mean(vSize)), inherit.aes=F, fill="white", fontface = "bold")

library(grid)
library(gridExtra)
samplePlot <- grid.rect(gp = gpar(fill = "grey"))   
grid.arrange(samplePlot, # plot 1
         samplePlot, # plot 2
         samplePlot, # plot 3
         samplePlot, # plot 4
         treemapHere, # plot5
         layout_matrix = rbind(c(1, 2, 3), 
                               c(4, 5, 5)),
         top = textGrob("Sample Title", 
                        gp = gpar(margin = margin(10, 0, 10, 0))),
         heights = c(5, 5))