组合共享相同 x 轴但不共享 y 轴的绘图

5
我希望能够将两个图形结合起来,它们共用一个x轴,但其中一个是关于分类数据的分面条形图,另一个是关于连续数据的不分面图像,但与第一个图形上的两个面有关。
以下是我提供的虚拟数据和代码:
farm<-  c(22,   33, 22, 33, 22, 33, 22, 33,  
22, 33, 22, 33, 22, 33, 22, 33, 22, 33,  
22, 33)
year<-  c(2010, 2010,   2011,   2011,   2012,   2012,   2013,   2013,    
2014,   2014,   2010,   2010,   2011,   2011,   2012,   2012,   2013,    
2013,   2014,   2014)
exp<-   c('a',  'a',    'a',    'a',    'a',    'a',    'a',    'a',     
'a',    'a',    'b',    'b',    'b',    'b', 'b',   'b',    'b',     
'b',    'b',    'b')
variable1<- c(3,    1,  3,  1,  2,  0,  2,   
1,  3,  0,  1,  1,  1,  0,  2,  0,  1,   
0,  0,  0)
variable2<- c(300,  100,    400,    123,    500,    100,    600,    100,     
700,    100,    700,    100,    600,    100,    700,    100,    600,     
100,    300,    100)
dwt<-data.frame(farm, year, exp, variable1)
dwt2<-data.frame(farm, year, variable2)
dwt$farm<- as.character(dwt$farm)
dwt %>%
mutate(as.character(farm))%>%
mutate(as.character(year))%>%
mutate(as.character(variable1))%>%
ggplot(aes(x=farm, fill = variable1)) +
geom_bar(stat = 'count') + facet_grid(exp~year) + 
guides(fill=guide_legend(title="Level")) +
coord_cartesian(ylim=c(0, 5))
dwt2$farm<- as.character(dwt2$farm)
dwt2 %>%
mutate(as.character(farm))%>%
mutate(as.character(year))%>%
ggplot(aes(x=farm, y = variable2)) +
geom_bar(stat = 'identity') + facet_grid(~year) + 
guides(fill=guide_legend(title="Level"))

这将得到以下图表:

在这里输入图片描述

在这里输入图片描述

我还搜索了其他问题并尝试了以下代码: ggplot()+ geom_bar(data=dwt, aes(x=farm, fill=variable1))+ facet_grid(exp~year) + geom_bar(data = dwt2, aes(x=farm, y=variable2))+ facet_grid(~year) 但出现以下错误:美学必须是长度为1或与数据(20)相同:x、y。
我认为这可能是由于分面造成的。如有帮助,将不胜感激。此外,如果可能的话,我更愿意使用两个数据框而不是合并它们。

https://dev59.com/DGox5IYBdhLWcg3wl1T4 在 geom_bar 层级指定您的数据参数 - TillU
这是一个非常常见的请求。你有做过任何搜索吗?如果是,那么详细说明早期答案对你的问题有什么问题。如果没有,则删除你的问题,这样负评就会消失。 - IRTFM
或者考虑使用 patchworkcowplot 将两个图表对齐并排放置。如果将这两个图表保存到变量 ab 中,则 library(patchwork); a / b 即可实现。 - Jon Spring
我已经在第42行添加了更多细节。 - Tom
“我对“我想要以某种方式将两个图表合并”这句话感到相当模糊。你能分享一下你所想象的图片吗?如果你只是想让它们彼此对齐,请参考我的先前评论。” - Jon Spring
当然,是的,有点含糊不清。理想情况下,我希望变量2 / dwt2 能够连接到变量1 / dwt 的顶部,就像另一个分面一样,这样它们就可以共享 X 轴和年份分面。或者,我想在一个组合图中使用次要 Y 轴,或将其转换为使用相同 Y 轴。谢谢。 - Tom
1个回答

3

这是你想要的吗?我使用了 patchwork 包,但你也可以使用 其他几个

library(tidyverse)
theme_set(theme_bw(base_size = 14))

farm <- c(
  22, 33, 22, 33, 22, 33, 22, 33,
  22, 33, 22, 33, 22, 33, 22, 33, 22, 33,
  22, 33
)
year <- c(
  2010, 2010, 2011, 2011, 2012, 2012, 2013, 2013,
  2014, 2014, 2010, 2010, 2011, 2011, 2012, 2012, 2013,
  2013, 2014, 2014
)
exp <- c(
  "a", "a", "a", "a", "a", "a", "a", "a",
  "a", "a", "b", "b", "b", "b", "b", "b", "b",
  "b", "b", "b"
)
variable1 <- c(
  3, 1, 3, 1, 2, 0, 2,
  1, 3, 0, 1, 1, 1, 0, 2, 0, 1,
  0, 0, 0
)
variable2 <- c(
  300, 100, 400, 123, 500, 100, 600, 100,
  700, 100, 700, 100, 600, 100, 700, 100, 600,
  100, 300, 100
)

dwt <- data.frame(farm, year, exp, variable1)
dwt2 <- data.frame(farm, year, variable2)
dwt$farm <- as.character(dwt$farm)
dwt2$farm <- as.character(dwt2$farm)

p1 <- dwt %>%
  mutate(as.character(farm)) %>%
  mutate(as.character(year)) %>%
  mutate(as.character(variable1)) %>%
  ggplot(aes(x = farm, fill = variable1)) +
  geom_bar(stat = "count") + facet_grid(exp ~ year) +
  guides(fill = guide_legend(title = "Level")) +
  coord_cartesian(ylim = c(0, 5)) +
  ### remove x-axis label and reduce bottom margin
  theme(
    axis.text.x = element_blank(),
    axis.title.x = element_blank(),
    axis.ticks.x = element_blank()
  ) +
  theme(plot.margin = margin(b = 2, unit = "pt"))


p2 <- dwt2 %>%
  mutate(as.character(farm)) %>%
  mutate(as.character(year)) %>%
  ggplot(aes(x = farm, y = variable2)) +
  geom_bar(stat = "identity") + facet_grid(~year) +
  guides(fill = guide_legend(title = "Level")) +
  ### remove strip and reduce top margin
  theme(strip.text = element_blank()) +
  theme(plot.margin = margin(t = 2, unit = "pt"))


library(patchwork)
p1 / p2

reprex package (v0.2.1.9000)于2019-02-07创建


1
谢谢,那正是我想要的,但我在安装patchwork包时遇到了问题。 - Tom
@Tom:不错。你也可以尝试我发布链接中的其他软件包。 - Tung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接