我有与this用户相同的问题 - 我有一个'jagged'刻面图,其中底行的面板比其他行少,我想在每列的底部有x轴刻度 .
针对该问题的建议解决方案是设置 scales="free_x"
. (在ggplot 0.9.2.1中;我相信我的行为在我的情况下是一个糟糕的解决方案:我的实际轴标签会相当长,所以将它们放在每一行下会占用太多空间 . 结果是这样的:
x <- gl(3, 1, 15, labels=paste("this is a very long axis label ", letters[1:5]))
y <- rnorm(length(x))
l <- gl(5, 3, 15)
d <- data.frame(x=x, y=y, l=l)
ggplot(d, aes(x=x, y=y)) + geom_point() + facet_wrap(~l, scales="free_x") +
theme(axis.text.x=element_text(angle=90, hjust=1))
在评论here中,Andrie建议可以在 grid
手动完成,但我不知道如何开始 .
1 回答
如果我没记错的话,对于如何将所有标签添加到最后一列下的同一行以及如何将这些最后标签提升到下一行存在疑问 . 所以这是两种情况的功能:
Edit: 因为这就像
print.ggplot
的替代品(见getAnywhere(print.ggplot)
)我已经添加了一些行以保留功能 .Edit 2: 我已经改进了一点:不再需要指定
nrow
和ncol
,所有面板的图也可以打印 .这是它的外观
Edit 3:
这是一种替代解决方案,上面的解决方案也很好 .
当想要与
facetAdjust
一起使用ggsave
时,存在一些问题 . 需要ggplot
类的图,因为ggsave
的源代码中有两个部分:print(plot)
和default_name(plot)
,以防一个人手动提供文件名(根据?ggsave
,似乎它不应该起作用) . 因此,给定一个文件名,有一个解决方法(在某些情况下可能有副作用):首先,让我们考虑实现浮动轴主效应的单独函数 . 通常,它会返回
gtable
对象,但是我们使用class(gtable) <- c("facetAdjust", "gtable", "ggplot")
. 通过这种方式,允许根据需要使用ggsave
和print(plot)
(参见下面的print.facetAdjust
)打印功能仅与
ggplot2:::print.ggplot
中的几行不同:例: