dat <- structure(list(id = c(30L, 40L, 50L), f1 = c(0.841933670833,
1.47207692205, 0.823895293045), f2 = c(0.842101814883, 1.48713866811,
0.900091982861), f3 = c(0.842759547545, 1.48717177671, 0.900710334491
), f4 = c(1.88961562347, 1.48729643008, 0.901274168324), f5 = c(1.99808377527,
1.48743226992, 0.901413662472), f6 = c(0.841933670833, 1.48713866811,
0.901413662472)), .Names = c("id", "f1", "f2", "f3", "f4", "f5",
"f6"), class = "data.frame", row.names = c(NA, -3L))
从这里我会使用melt
. 阅读?melt.data.frame
以获取更多信息。但是一句话,这将数据从“宽”格式转换为“长”格式。
library(reshape2)
dat.m <- melt(dat, id.vars='id')
> dat.m
id variable value
1 30 f1 0.8419337
2 40 f1 1.4720769
3 50 f1 0.8238953
4 30 f2 0.8421018
5 40 f2 1.4871387
6 50 f2 0.9000920
7 30 f3 0.8427595
8 40 f3 1.4871718
9 50 f3 0.9007103
10 30 f4 1.8896156
11 40 f4 1.4872964
12 50 f4 0.9012742
13 30 f5 1.9980838
14 40 f5 1.4874323
15 50 f5 0.9014137
16 30 f6 0.8419337
17 40 f6 1.4871387
18 50 f6 0.9014137
>
然后绘制你想要的:
ggplot(dat.m, aes(x=id, y=value, colour=variable)) +
geom_line() +
geom_point(data=dat.m[dat.m$variable=='f2',], cex=2)
Whereaes
定义了美学,例如 x 值、y 值、颜色/颜色等。然后添加“层”。在前面的示例中,我为我在其中定义的ggplot()
部分添加了一行,geom_line()
并添加了一个点geom_point
,我只将它们放在f2
变量上。
下面,我添加了一条平滑线geom_smooth()
。有关此功能的更多信息,请参阅文档,?geom_smooth
.
ggplot(dat.m, aes(x=id, y=value, colour=variable)) +
geom_smooth() +
geom_point(data=dat.m[dat.m$variable=='f2',], shape=3)
或所有人的形状。在这里我把形状放在美学中ggplot()
。通过将它们放在这里,它们适用于所有连续的层,而不必每次都指定它们。但是,我可以覆盖ggplot()
任何后续层中提供的值:
ggplot(dat.m, aes(x=id, y=value, colour=variable, shape=variable)) +
geom_smooth() +
geom_point() +
geom_point(data=dat, aes(x=id, y=f2, color='red'), size=10, shape=2)
然而,一点点的ggplot
理解只是需要时间。完成文档和网站上给出的一些示例ggplot2
。如果你的经历和我的一样,经过几天或几周的斗争,它最终会成功。关于数据,如果您将数据分配给dat
,则代码不会更改。 dat <- read.csv(...)
. 我不用data
作变量,因为它是一个内置函数。