问题描述
我已经用facet_wrap
创建了一个月度图
因此在图中,我有3行4列。现在,我想为每行设置通用的y轴,例如,第一行应具有一个通用的y值,第二行和第三行也应如此。
我尝试了但无法做到。
我用过
ggplot(data = PB,aes(x = new_date,y = Mean,group = 1)) +
geom_line(aes(color = experiment)) +
theme(legend.title = element_blank()) +
facet_wrap( ~MonthAbb,ncol = 4,scales = "free")
解决方法
问题是scales = "free"
。删除它,它将在行和列之间设置一个通用比例(或使用"free_y"
或"free_x"
进行相应调整)。
如果您要查找的是每行一个单独的比例尺,则将需要更多的工作。在R: How do I use coord_cartesian on facet_grid with free-ranging axis处检查该解决方案,该解决方案在绘图上分层不可见点以强制显示所需的外观。否则,一个简单的解决方案可能是使用gridExtra查看并分别绘制每行,然后合并到网格中。
编辑:gridExtra解决方案类似于:
library(gridExtra)
g1 <- ggplot(data = PB1,aes(x=new_date,y = Mean,group = 1)) +
geom_line(aes(color = experiment)) +
theme(legend.title = element_blank())
g2 <- ggplot(data = PB2,group = 1)) +
geom_line(aes(color = experiment)) +
theme(legend.title = element_blank())
grid.arrange(g1,g2,nrow=2)
,
这里是一个根据每个面板进行设置的选项。它基于我放在github包中的函数。我以一些虚拟数据为例。
library(ggplot2)
library(ggh4x) # devtools::install_github("teunbrand/ggh4x")
df <- data.frame(
x = rep(1:20,9),y = c(cumsum(rnorm(60)) + 90,cumsum(rnorm(60)) - 90,cumsum(rnorm(60))),row = rep(LETTERS[1:3],each = 60),col = rep(LETTERS[1:3],each = 20)
)
ggplot(df,aes(x,y)) +
geom_line() +
facet_wrap(row ~ col,scales = "free_y") +
facetted_pos_scales(
y = rep(list(
scale_y_continuous(limits = c(90,100)),scale_y_continuous(limits = c(-100,-80)),scale_y_continuous(limits = c(0,20))
),each = 3)
)