ggplot2,facet wrap,每行固定y比例,行之间自由缩放

kmc*_*coy 3 r ggplot2 facet-wrap

我想使用facet_wrap生成一个绘图,该绘图对于每个包裹的行具有不同的y比例.换句话说,在同一行上使用固定比例,不同行上的自由比例,具有固定的x比例.自由秤不能完全满足我的要求,也不能提供facet_grid.如果可能的话,我想避免创建两个单独的图,然后将它们粘贴在一起.我正在寻找类似下图的结果,但第一行的最大刻度为300,第二行的最大刻度为50.谢谢你的帮助!

这是我的代码:

library(ggplot2)
library(reshape)

# set up data frame
dat <- data.frame(jack = c(150,160,170),
              surgeon = c(155,265,175),
              snapper = c(10,15,12),
              grouper = c(5,12,50))
dat$island<-c("Oahu","Hawaii","Maui")
df<-melt(dat)

# plot
ggplot(df, aes(fill=variable, y=value, x=island)) + 
  geom_bar(width = 0.85, position= position_dodge(width=0.5),stat="identity", colour="black") +
  facet_wrap(~variable, scales = "free_y",ncol=2) + 
  theme_bw() +
  theme(strip.text = element_text(size=15, face="bold"))+
  theme(legend.position="none")+
  theme(panel.grid.major  = element_line(colour = "white", size = 0.2))+
  theme(panel.grid.minor  = element_line(colour = "white", size = 0.5))+
  theme(axis.text.x = element_text(angle = 90, hjust =1, vjust =0.5, size=18))+
  labs(y = expression(paste("Yearly catch (kg)")))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Lau*_*ley 6

根据Eric评论的链接中较低排名的答案之一,您可以添加一个混合到背景中的图层来强制执行轴.

在这里,我创建了第二个数据框(df2),它将单个点放在"夏威夷",并为四个变量/鱼类型提供所需的最大值(300或50).通过手动设置geom_point白色的颜色,它会淡入背景.

library(ggplot2)
library(reshape)

# set up data frame
dat <- data.frame(jack = c(150,160,170),
                  surgeon = c(155,265,175),
                  snapper = c(10,15,12),
                  grouper = c(5,12,50))
dat$island<-c("Oahu","Hawaii","Maui")
df<-melt(dat)
#> Using island as id variables

df2 <- data.frame(island = rep("Hawaii",4), variable = c("jack","surgeon","snapper","grouper"),value = c(300,300,50,50))

ggplot(df, aes(fill=variable, y=value, x=island)) + 
  geom_bar(width = 0.85, position= position_dodge(width=0.5),stat="identity", colour="black") +
  geom_point(data = df2, aes(x = island, y = value), colour = "white") +
  facet_wrap(~variable, scales = "free_y",ncol=2) + 
  theme_bw() +
  theme(strip.text = element_text(size=15, face="bold"))+
  theme(legend.position="none")+
  theme(panel.grid.major  = element_line(colour = "white", size = 0.2))+
  theme(panel.grid.minor  = element_line(colour = "white", size = 0.5))+
  theme(axis.text.x = element_text(angle = 90, hjust =1, vjust =0.5, size=18))+
  labs(y = expression(paste("Yearly catch (kg)")))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,添加不可见点的更好方法是使用 alpha = 0。这使得该点完全透明,因此该点后面的内容并不重要。因此只需替换绘图的第三行:`geom_point(data = df2, aes(x = island, y = value), alpha = 0)` (2认同)