facet_grid 中的多行
Posted
技术标签:
【中文标题】facet_grid 中的多行【英文标题】:Multiple rows in facet_grid 【发布时间】:2018-01-18 14:03:25 【问题描述】:我有一个大致如下所示的数据集:
names = tibble(NAME_2=c("Location1","Location2","Location3","Location4"))
dates = tibble(date = seq(as.Date("2015-01-01"), as.Date("2016-12-31"), by="days"))
types = tibble(type = c("comment","post"))
df <- merge(names,dates)
df <- merge(df, types)
zero <- seq(from=0, to=200, by=1)
df$n <- sample(zero, size=nrow(df), replace=TRUE)
这会产生这样的分面图:
ggplot(data = df, aes(x = date, y = n)) +
geom_line() +
facet_grid(type ~ NAME_2, scale = "free_y")
是否有可能在facet_wrap
中获得类似ncol=2
的行为,从而使Location3 和Location4 出现在Location1 和Location2 的下方?实际上,我有大约 12 个位置,因此不可能在一页上打印并保持清晰。
【问题讨论】:
可能值得研究一下网格包。 使用facet_wrap
!!!
facet_wrap
在一维中工作,因为产生的每个方面都在一个变量上。如果你想做一个 x by y 矩阵,facet_grid
是要走的路。
【参考方案1】:
您可以使用grid.arrange
,如:
library(gridExtra)
grid.arrange(
ggplot(data = df[df$NAME_2 %in% c('Location1','Location2'),], aes(x = date, y = n)) +
geom_line() + xlab(NULL) +
facet_grid(type ~ NAME_2, scale = "free_y"),
ggplot(data = df[df$NAME_2 %in% c('Location3','Location4'),], aes(x = date, y = n)) +
geom_line() +
facet_grid(type ~ NAME_2, scale = "free_y"),
nrow=2)
如果您确定 x 轴范围从上到下对齐,则可以在第一个图上取消 x 轴刻度线/标签。
【讨论】:
太棒了,这完美!关于如何修复一行刻面的 y 比例的任何想法?说 Location4 的范围不是从 0 到 200,而是 0 到 800:我怎样才能保留评论 y 范围,但将两个图的帖子 y 范围设置为 0 到 800? @Lukas 我认为您将不得不使用 facet_wrap 而不是 facet_grid。你也可以设置 ylim() 但这将适用于我相信的每个方面。以上是关于facet_grid 中的多行的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化分面图(facet_grid):去除分面图灰色矩形框以及框中的标签Getting rid of facet_grid labels on those gray boxes