3

我对 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

我想绘制:

  1. X 轴上的第一列 (id)
  2. 每个后续的“列”作为线图,在线的点之间进行平滑以创建一条漂亮的平滑线
  3. f1、f2 的传奇......
  4. 指定线条颜色并在 f2 列的线条图中添加标记(例如十字,即“+”)(例如)。

我对ggplot真的很陌生,所以真的没有超越将文件读入R。

任何帮助我创建如上所述的情节,都将很有教育意义,并有助于减少 ggplot 学习曲线。

4

1 回答 1

3
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作变量,因为它是一个内置函数。

于 2012-08-01T00:50:12.307 回答