如何调整ggplot2中facet strip的标签

3
我尝试了一个新的包ggthemr,但是遇到了两个问题。
数据集如下:
tma<-data.frame(
invasion=c(0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1),
sediment=c(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1),
nitrogen=c( 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1),
type=c("Evenness index",
"Evenness index",
"Evenness index",
"Evenness index",
"Total mass(g)",
"Total mass(g)",
"Total mass(g)",
"Total mass(g)",
"Evenness index",
"Evenness index",
"Evenness index",
"Evenness index",
"Total mass(g)",
"Total mass(g)",
"Total mass(g)",
"Total mass(g)"),
mean=c(0.76109,
0.63923,
0.78138,
0.73626,
59.0425,
56.15383,
50.39167,
44.9215,
0.60109,
0.55402,
0.81587,
0.74957,
62.207,
53.21033,
49.99517,
42.38767),
standard.error=c(0.03638,
0.06232,
0.045,
0.03912,
5.87524,
5.87524,
5.87524,
5.87524,
0.05093,
0.04807,
0.02694,
0.04843,
5.87524,
5.87524,
5.87524,
5.87524)
)

tma$nitrogen <- as.factor(tma$nitrogen)
tma$sediment <- as.factor(tma$sediment)

代码如下:
library(tidyverse)
library(ggthemr)

ggthemr('light', layout = 'scientific',
    spacing = 1, type = 'inner', line_weight = 0.6,
    )

ggplot(tma, aes(invasion, mean, color = sediment)) +
geom_ribbon(
    aes(ymin = mean - standard.error, ymax = mean + standard.error,group=sediment),
    alpha = 0.2,
    color = NA
    ) +
geom_line(size = 1) +
geom_point(show.legend = TRUE) +
facet_grid(type ~ nitrogen, scales = "free_y") +
scale_x_discrete(breaks = NULL, expand = c(0, 0.10)) +
scale_y_continuous(sec.axis = dup_axis(name=NULL))+
theme(legend.position = "bottom") +
theme(panel.spacing.x = unit(0.1, "lines"), panel.spacing.y = unit(0.1, "lines")) +
theme(strip.text.x = element_text(size = 10),
    strip.text.y = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    axis.title.x = element_text(size = 14),
    ) +
xlab("From not invaded to invaded") +
ylab("Mean with standard error")

输出结果如下:

输出结果如下:

enter image description here

我希望重复的y轴在图形的右侧,在facet strip的左侧,但实际上它在facet strip的右侧。

另一个问题是facet strip无法完全显示,例如Total mass (g)的标题。

出了什么问题?我不知道应该调整哪些参数。非常感谢。


你能提供数据让我们重现你的图表吗? - acylam
当然,数据集已添加。 - user8676913
1个回答

1
library(devtools)    
# devtools::install_github('cttobin/ggthemr') # need this to install ggthemr
library(ggthemr)

ggthemr('light', layout = 'scientific',
        spacing = 1, type = 'inner', line_weight = 0.6
)

ggplot(tma, aes(invasion, mean, color = sediment)) +
  geom_ribbon(
    aes(ymin = mean - standard.error, 
        ymax = mean + standard.error,group = sediment), 
    alpha = 0.2, color = NA) +
  geom_line(size = 1) +
  geom_point(show.legend = TRUE) +
  facet_grid(type ~ nitrogen, scales = "free_y") +
  scale_x_discrete(breaks = NULL, expand = c(0, 0.10)) +
  scale_y_continuous(sec.axis = dup_axis(name=NULL))+
  theme(legend.position = "bottom",
        panel.spacing.x = unit(0.1, "lines"), 
        panel.spacing.y = unit(0.1, "lines"),
        strip.text.x = element_text(size = 10),
        strip.text.y = element_text(size = 14, margin = margin(0,0,0,5)),
        strip.placement = "outside",
        axis.title.y = element_text(size = 14),
        axis.title.x = element_text(size = 14)) +
  xlab("From not invaded to invaded") +
  ylab("Mean with standard error")

注意:

  1. 为了解决“y轴左侧的标签”问题,我添加了theme(strip.placement = "outside")。这将把条带放在轴的另一侧。
  2. 为了解决“标签未完全显示”的问题,我在strip.text.yelement_text中添加了一个margin = margin(0,0,0,5)参数。这控制了条带文本的边距。起初,似乎很难确定要调整哪个数字,但是快速查看?element_text告诉我顺序是:t = top,r = right,b = bottom,l = left(想想“trouble”)。因此,最后一个数字控制条带文本的左边距。
  3. 我还格式化了您的代码,使其更加清晰。例如,将所有的theme组合在一起。

enter image description here


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