ggplot函数因子级别作为标题

时间:2015-12-09 19:50:16

标签: r ggplot2

我想根据以下数据创建绘图,以便每个绘图标题都是Site。我有以下数据框:

> head(sum_stats)
   Season         Site Isotope Time n      mean       sd        se
1 Summer Afon Cadnant   14CAA    0 3 100.00000 0.000000 0.0000000
2 Summer Afon Cadnant   14CAA    2 3  68.26976 4.375331 2.5260988
3 Summer Afon Cadnant   14CAA    5 3  69.95398 7.885443 4.5526627
4 Summer Afon Cadnant   14CAA   24 3  36.84054 2.421846 1.3982532
5 Summer Afon Cadnant   14CAA   48 3  27.96619 0.829134 0.4787008
6 Summer Afon Cadnant   14CAA   72 3  26.28713 1.454819 0.8399404

> str(sum_stats)
'data.frame':   648 obs. of  8 variables:
 $ Season : Factor w/ 1 level "Summer": 1 1 1 1 1 1 1 1 1 1 ...
 $ Site   : Factor w/ 27 levels "Afon Cadnant",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Isotope: Factor w/ 4 levels "14CAA","14CGlu",..: 1 1 1 1 1 1 2 2 2 2 ...
 $ Time   : num  0 2 5 24 48 72 0 2 5 24 ...
 $ n      : int  3 3 3 3 3 3 3 3 3 3 ...
 $ mean   : num  100 68.3 70 36.8 28 ...
 $ sd     : num  0 4.375 7.885 2.422 0.829 ...
 $ se     : num  0 2.526 4.553 1.398 0.479 ...

我写了一个函数来创建上述数据的图:

plot_func <- function(T){ggplot(data = T) + geom_point(aes(Time, mean,   colour = Season)) + 
  geom_line(aes(Time, mean, colour = Season)) +
  geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width   = 0.1) +
  labs(title = unique(levels(sum_stats$Site)), y = "Percentage of isotope   remaining in solution", x = "Time (h)") +
  facet_wrap(~Isotope, ncol = 2)} + theme(axis.title.y = element_text(vjust = 1)) +
  theme(axis.title.x = element_text(vjust = -0.1)) + theme(plot.title =  element_text(vjust = 1)) +
  theme_bw()

然后我在by调用中使用该函数在Site因子的每个级别上运行该函数:

by(sum_stats, sum_stats$Site, plot_func)

我得到以下表格的27张图表:

enter image description here

但是,所有标题都是相同的。如何使每个标题反映其绘制的因子水平?这可以在绘图功能中完成吗?

由于

1 个答案:

答案 0 :(得分:2)

现在您使用原始data.frame设置标题,而不是传递给您的数据子集。如果您收到的子集中的所有站点都相同,则可以使用第一个站点作为标题。使用

...
labs(title = T$Site[1], ...)
...