我对我的植物进行了多次观察(每周一次)并将植物分成两组(有和没有处理)。我的数据结构如下所示:
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
我想创建一个类似于以下的折线图。谁能帮帮我吗?我真的不知道从哪里开始寻找。
答案 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()
并根据需要调整其余的美学。
答案 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()