简体   繁体   English

两个单独的y轴标题,用于绘图的两个面,同时使用ggplot2保持刻面顶部条带标签

[英]Two separate y-axis titles for two facets of a plot while keeping the facet top strip labels using ggplot2

I have this data frame: 我有这个数据框:

> str(DF)
'data.frame':   14084 obs. of  6 variables:
.
.
.
 $ Variables: chr  "Height" "Height" "Height" "Height" ...
 $ Values   : num  245 129 301 162 123 125 115 47 46 135 ...
 $ Year     : Factor w/ 2 levels "2015","2016": 1 1 1 1 1 1 1 1 1 1 ...

I wrapped the plot in two facets (in two columns) using facet_wrap() with free axes scales. 我使用带有自由轴刻度的facet_wrap()将绘图包装在两个面(两列)中。

ggplot(data = DF, aes(x = Year, y = Values)) +
  geom_boxplot() +
  facet_wrap("Variables", scales = "free")

My problem is: 我的问题是:
Both the facets share a common y-axis title. 这两个方面共享一个共同的y轴标题。 What I would like, however, is two separate y-axis titles for the two facets. 然而,我想要的是两个方面的两个独立的y轴标题。 A common x-axis title is fine for me. 一个常见的X轴标题对我来说很好。

I came across this question Showing different axis labels using ggplot2 with facet_wrap but it does not solve the problem the way I want as I do not want to lose the facet labels on top. 我遇到了这个问题, 使用ggplot2和facet_wrap显示不同的轴标签,但它没有按照我想要的方式解决问题,因为我不想丢失顶部的facet标签。 Moreover, my facets are arranged horizontally. 而且,我的刻面是水平排列的。

I tried using labs() : 我尝试过使用labs()

. . . +
labs(y=c("A", "B"))

But it just changes the y-axis title of first facet to A and the second facet remains as it is. 但它只是将第一个方面的y轴标题更改为A ,第二个方面保持不变。

How could I address this problem? 我怎么能解决这个问题?

Any help would be appreciated. 任何帮助,将不胜感激。

Not sure if I fully understood what you need, but here is my attempt based on your suggested link and this one . 不知道如果我完全理解你所需要的,但在这里是基于我尝试你的建议的链接这一个

library(ggplot2)
library(grid)
library(gtable)

# Some fake data
set.seed(2018)
df <- data.frame(variables = rep(c("var1", "var2"), times = 100),
                 values = rnorm(100),
                 year = as.factor(2001:2010))

# Make a plot with positioning the strip labels to the right of each facet,
# acting as OY axis titles.
# We will add the top strip labels in the next step,
# using the `grid` & `gtable` packages functionality.
p <- ggplot(df, aes(x = year, y = values, group = year) ) +
  geom_boxplot() +
  facet_wrap(~ variables, scales = "free_y", nrow = 1, 
             strip.position = "left", 
             labeller = as_labeller(c(var1 = "Example var1", 
                                      var2 = "Example var2") ) )  +
  ylab(NULL) +
  theme(strip.background = element_blank(),
        strip.placement = "outside",
        # Customize theme so that is black & white style as requested
        panel.background = element_rect(fill = NA, colour = 'black'),
        panel.grid = element_blank())
p

在此输入图像描述

Add the top strip labels using the functionality of the grid & gtable packages: 使用gridgtable包的功能添加顶部条带标签:

# Get gtable object
g <- ggplotGrob(p)
# Sometimes helpful to get an idea about the grobs' position
grid.show.layout(gtable:::gtable_layout(g)) 

# Add an extra top row (make some space)
g <- gtable_add_rows(x = g, heights = unit(0.65, 'cm'), pos = 2)
# First strip
g <- gtable_add_grob(x = g,
                     grobs = list(rectGrob(gp = gpar(col = NA, 
                                                     fill = NA)),
                                  textGrob(label = "var1", 
                                           gp = gpar(col = "black"))),
                     t = 3, l = 7, b = 3, r = 7, 
                     name = c("strip-top-1-rectg", "strip-top-1-text"))
# Second strip
g <- gtable_add_grob(x = g,
                     grobs = list(rectGrob(gp = gpar(col = NA, 
                                                     fill = NA)),
                                  textGrob(label = "var2", 
                                           gp = gpar(col = "black"))),
                     t = 3, l = 13, b = 3, r = 13, 
                     name = c("strip-top-2-rectg", "strip-top-2-text")) 

# Draw the edited plot
grid.newpage()
grid.draw(g)

在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM