好消息:我可以使用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)是一个列表,我需要在一个包含几个ggplots的页面上绘制树形图。我预计需要为最终用户添加/重新排列图表,所以我想要一个相对灵活的解决方案。
#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))
但解决方案需要足够灵活,以便我可以轻松添加/重新排列图表,例如:
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的语法,因此我可以轻松地标准化工作表&#39 ; s风格。但是,如果没有办法做到这一点,我会接受任何解决方案(将树形图保存为grob?),这样我就可以在ggplots页面中轻松重新排列这个图形。
到目前为止我做过的尝试:老实说,并不多。谷歌还没有成为我的朋友。我发现的唯一建议是使用treemapify,我无法为此特定项目执行此操作。
答案 0 :(得分:2)
如果使用ggplot逐步重建树形图怎么办? E.g。
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))