如何在ggplot2

时间:2017-09-26 14:09:17

标签: r ggplot2

我尝试了一个新包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轴位于图的右侧,并且在小平面条的左侧,但它实际上位于小平面条的右侧。

另一个问题是小面条无法完全显示,例如,总质量(g)的标题。

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

1 个答案:

答案 0 :(得分:0)

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. 要解决“标签未完全显示”问题,我在margin = margin(0,0,0,5)的{​​{1}}中添加了element_text参数。这可以控制条带文本的边距。首先,调整哪个数字似乎令人困惑,但快速strip.text.y告诉我顺序是:t = top,r = right,b = bottom,l = left(想想“ tr OU的 BL E“)。因此,最后一个数字控制条带文本的左边距。
  3. 我还格式化了你的代码,使它更清洁。例如,组合所有?element_text
  4. enter image description here