ggplot2, facet wrap,固定的y刻度为每一行,*刻度之间的行

时间:2021-12-25 14:58:55

I would like to produce a plot using facet_wrap that has a different y scale for each row of the wrap. In other words, with fixed scales on the same row, free scales on different rows, with a fixed x scale. Free scales doesn't give me exactly what I'm looking for, nor does facet_grid. If possible, I'd like to avoid creating 2 separate plots and then pasting them together. I'm looking for a result like the plot below, but with a y scale max of 300 for the first row, and an y scale max of 50 in the second row. Thanks for any help!

我想用facet_wrap制作一个图表,它的每一行都有不同的y刻度。换句话说,同一行有固定的尺度,不同行有*尺度,有固定的x尺度。*比例尺并不能确切地告诉我我在寻找什么,facet_grid也不能。如果可能的话,我希望避免创建两个单独的情节,然后将它们粘贴在一起。我正在寻找如下图所示的结果,但是第一行的y刻度最大为300,第二行的y刻度最大为50。感谢任何帮助!

Here is my code:

这是我的代码:

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)")))

ggplot2, facet wrap,固定的y刻度为每一行,*刻度之间的行

1 个解决方案

#1


5  

Drawing on one of the lower ranked answers from the link Eric commented, you can add a layer that blends into the background to enforce the axes.

利用Eric注释的链接中排名较低的答案之一,您可以添加一个与背景混合的层来加强坐标轴。

Here I created a second data frame (df2) that puts a single point at "Hawaii" and the max value you wanted (300 or 50) for the four variable/fish types. By manually setting the color of the geom_point white, it fades into the background.

在这里,我创建了第二个数据框架(df2),它将一个点放在“Hawaii”上,并为四个变量/fish类型设置您想要的最大值(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)
#> 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)")))

ggplot2, facet wrap,固定的y刻度为每一行,*刻度之间的行

#1


5  

Drawing on one of the lower ranked answers from the link Eric commented, you can add a layer that blends into the background to enforce the axes.

利用Eric注释的链接中排名较低的答案之一,您可以添加一个与背景混合的层来加强坐标轴。

Here I created a second data frame (df2) that puts a single point at "Hawaii" and the max value you wanted (300 or 50) for the four variable/fish types. By manually setting the color of the geom_point white, it fades into the background.

在这里,我创建了第二个数据框架(df2),它将一个点放在“Hawaii”上,并为四个变量/fish类型设置您想要的最大值(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)
#> 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)")))

ggplot2, facet wrap,固定的y刻度为每一行,*刻度之间的行