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)
aes
定义了美学元素,如x值、y值、颜色等。然后你可以添加“层”。在上一个示例中,我使用geom_line()
为ggplot()
部分定义的内容添加了一条线,并使用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
作为变量,因为它是一个内置函数。