我对 ggplot(在某种程度上是 R)完全陌生。我对可以使用 ggplot 创建的图表的质量感到震惊,我正在尝试学习如何使用 ggplot 创建一个简单的多线图。
不幸的是,我还没有找到任何可以帮助我接近我正在尝试做的事情的教程:
我有一个包含以下数据的 CSV 文件:
id,f1,f2,f3,f4,f5,f6
30,0.841933670833,0.842101814883,0.842759547545,1.88961562347,1.99808377527,0.841933670833
40,1.47207692205,1.48713866811,1.48717177671,1.48729643008,1.48743226992,1.48713866811
50,0.823895293045,0.900091982861,0.900710334491,0.901274168324,0.901413662472,0.901413662472
我想绘制:
- X轴第一列(id)
- 每个后续的“列”作为线图,在线的点之间进行平滑以创建漂亮的平滑线
- f1、f2 ....的图例。
- 指定线条颜色并向 f2 列的线条图添加标记(例如十字,即“+”)(例如)。
我真的是 ggplot 的新手,所以除了将文件读入 R 之外,我真的没有其他的东西。
任何帮助我创建上述情节的帮助都将非常有教育意义,并有助于减少 ggplot 学习曲线。
最佳答案
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 值、颜色/颜色等。然后添加“层”。在前面的示例中,我为我在 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
作为一个变量,因为它是一个内置函数。
关于r - ggplot 从 csv 文件创建多线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751047/