R折线图:2种不同处理的多次观察

时间:2018-02-01 23:21:05

标签: r plot ggplot2

我对我的植物进行了多次观察(每周一次)并将植物分成两组(有和没有处理)。我的数据结构如下所示:

Treatment   Leaf Area 1 Leaf Area 2 Leaf Area 3 Leaf Area 4 Leaf Area 5
none        2.411545455 13.02745987         
yes         1.199545455 0.412511147         
none        2.448363636 28.56727482 51.49511341 49.38664803 15.63761378
yes         2.797454545 23.49791914 31.97397924 39.60835617 8.544331072

我想创建一个类似于以下的折线图。谁能帮帮我吗?我真的不知道从哪里开始寻找。

Example line chart

2 个答案:

答案 0 :(得分:0)

目前,您已将数据设置为"广泛"格式。我不确定每行是不是一个不同的工厂或者是什么,但重要的是每次测量时,看起来你正在添加一列。添加行而不是列更好。

理想情况下,一个好的数据框将设置在" long"格式,其中每一行是给定工厂的不同观察而不是新列。例如:

set.seed(256)

dat <- 
  data.frame(trt = sample(c("1", "2"), 50, TRUE), 
             week =  sample(1:5, 50, TRUE)) %>%
  mutate(area = ifelse(trt == 1, rnorm(50), rnorm(50, 12))) %>%
  arrange(week, trt)

> head(dat)
  trt week       area
1   1    1 -1.8472691
2   1    1 -0.1537133
3   1    1 -0.3528910
4   1    1  1.6109927
5   2    1 11.9489893
6   2    1 10.4330834
...

如果您的数据设置如此,那么很多事情都非常简单。在你的问题中创建情节就像:

dat %>%           
ggplot(aes(x = week, y = area, colour = trt)) +
  geom_point() +
  geom_smooth()

幸运的是,从&#34;宽&#34;转换起来非常简单到&#34;长&#34;使用reshape2库格式化。您使用melt()并提供melt() fx作为ID变量以及哪些是度量值:

set.seed(256)
your_dat <- #Not actually your data, just some stuff in a "wide" format
  data.frame(treatment = rep(c("none", "yes"), each = 2), 
             la1 = rnorm(4), 
             la2 = rnorm(4), 
             la3 = c(NA, NA, rnorm(2)), 
             la4 = c(NA, NA, rnorm(2)), 
             la5 = c(NA, NA, rnorm(2)), 
             week = sample(1:5, 4, TRUE))

library(reshape2)

your_dat <- 
  your_dat %>% 
  melt(id.vars = c("treatment", "week"), measure.vars = c("la1", "la2", "la3", "la4", "la5"))

> head(your_dat)
  treatment week variable       value
1      none    1      la1 -0.07465645
2      none    3      la1 -1.00718773
3       yes    5      la1 -1.05276623
4       yes    1      la1  0.47908588
5      none    1      la2 -0.95751656
6      none    3      la2  0.19835162

一旦你将其平方移开,将其全部传递给ggplot()

your_dat %>%
  ggplot(aes(x = week, y = value, colour = treatment)) +
  geom_point() + 
  geom_smooth()

enter image description here

并根据需要调整其余的美学。

答案 1 :(得分:0)

这是一种简单的方法:

library(reshape2)
dd=melt(data, id=c("tratment","week"))

library(ggplot2)
ggplot(dd) + geom_line(aes(x=week, y=value, colour=treatment)) +scale_colour_manual(values=c("red","darkgreen"),
                  name="Treatment")+geom_smooth()