我希望在使用
例如,下面这张图的
facet_wrap()
进行分面且两个变量和两个刻度都自由缩放时,能够消除条形标签的冗余。例如,下面这张图的
facet_wrap
版本:library(ggplot2)
dt <- txhousing[txhousing$year %in% 2000:2002 & txhousing$month %in% 1:3,]
ggplot(dt, aes(median, sales)) +
geom_point() +
facet_wrap(c("year", "month"),
labeller = "label_both",
scales = "free")
应该具有这个 facet_grid
版本的外观,其中条带标签位于图形的顶部和右侧边缘(也可以是底部和左侧边缘)。
ggplot(dt, aes(median, sales)) +
geom_point() +
facet_grid(c("year", "month"),
labeller = "label_both",
scales = "free")
不幸的是,使用facet_grid
不是一种选择,因为据我所知,它不允许比例尺“完全自由” - 请参见此处或这里
我考虑过的一种尝试是生成单独的图形,然后将它们组合起来:
library(cowplot)
theme_set(theme_gray())
p1 <- ggplot(dt[dt$year == 2000,], aes(median, sales)) +
geom_point() +
facet_wrap("month", scales = "free") +
labs(y = "2000") +
theme(axis.title.x = element_blank())
p2 <- ggplot(dt[dt$year == 2001,], aes(median, sales)) +
geom_point() +
facet_wrap("month", scales = "free") +
labs(y = "2001") +
theme(strip.background = element_blank(),
strip.text.x = element_blank(),
axis.title.x = element_blank())
p3 <- ggplot(dt[dt$year == 2002,], aes(median, sales)) +
geom_point() +
facet_wrap("month", scales = "free") +
labs(y = "2002") +
theme(strip.background = element_blank(),
strip.text.x = element_blank())
plot_grid(p1, p2, p3, nrow = 3)
我对上述的hackish尝试感到满意,但我想知道在facet_wrap
中是否有什么东西可以实现所需的输出。我觉得我可能错过了一些显而易见的东西,也许我的搜索答案并没有包含正确的关键词(我有这样的感觉这个问题以前已经被解决过)。
gt1
添加新列时,你需要用gt1$widths[1]
替换gt.side1$widths[1]
。 - Valentin_Ștefangt2$grobs
覆盖gt1$grobs
时,它会覆盖上部面板的一些顶点。我认为首先应该添加一个顶行gt1 <- gtable_add_rows(gt1, heights = unit(0.5, 'cm'), pos = 2)
,然后使用类似于gt1 <- gtable_add_grob(gt1, grobs = gt2$grobs[grep('strip-t', gt2$layout$name)], t = 2, l = gt1$layout[grep('strip-t.+1$', gt1$layout$name),]$l)
的方法添加顶部facet标签。 - Valentin_Ștefangt.side1
)。现在已经修复了。 - dwwggh4x
包中的facet_grid2
函数,这变得非常容易。请看我的解决方案。 - UseR10085