使用ggplot2从数据框绘制多条线

13

我试图使用ggplot2绘制多条线。我的数据按照以下方式适合到数据框中:

> rs
  time           1           2           3           4
1  200 17230622635 17280401147 17296993985 17313586822
2  400 22328386154 22456712709 22499488227 22542263745
3  600 28958840968 29186097622 29261849840 29337602058
4  800 40251281810 40650094691 40783032318 40915969945
5 1000 73705771414 74612829244 74915181854 75217534464

我希望使用“时间”列作为X值,其他列是不同线中点的Y值。在上面的数据中,有4条线,每条线由5个点组成。更具体地说,第一条线有点(200, 17230622635),(400, 22328386154),(600, 28958840968),等等。第二条线有点(200, 17280401147),(400, 22456712709),等等。(如果您需要数据格式的进一步解释,请参见结尾的附言部分。)

要生成类似的数据,您可以使用以下代码:

rs = data.frame(seq(200, 1000, by=200), runif(5), runif(5), runif(5))
names(rs)=c("time", 1:3)

我在Stack Overflow上参考了一些例子,尝试使用reshape2和ggplot2来制作这个图表:

我首先将数据融合成“长格式”:

library('reshape2')
library('ggplot2')
melted = melt(rs, id.vars="time")

然后使用下面的语句绘制数据:

Then plot the data using the following statement:

ggplot() + geom_line(data=melted, aes(x="time", y="value", group="variable"))

然而,我得到了一个空图,没有任何点或线。

有人能帮我看看我的过程出了什么问题吗?

P.S.

关于数据格式:

可以想象班级里有很多学生,我们有他们几次测验的分数。每一行包含一个学生的数据:第一列是测验编号,其余列是他/她的分数。对于每个学生,我们想要绘制一条线来反映他/她的成绩在不同测验中的变化,每个点代表某个学生某次测验的分数。由于有多个学生,我们想要画出多条线。

关于融合后的数据:

具体到我上面展示的数据,我从melt()函数中得到的数据为:

> melted
   time variable       value
1   200        1 17230622635
2   400        1 22328386154
3   600        1 28958840968
4   800        1 40251281810
5  1000        1 73705771414
6   200        2 17280401147
7   400        2 22456712709
8   600        2 29186097622
9   800        2 40650094691
10 1000        2 74612829244
11  200        3 17296993985
12  400        3 22499488227
13  600        3 29261849840
14  800        3 40783032318
15 1000        3 74915181854
16  200        4 17313586822
17  400        4 22542263745
18  600        4 29337602058
19  800        4 40915969945
20 1000        4 75217534464

2
为什么你需要融合? - juanchito
2个回答

22

去掉引号:

ggplot(data=melted, aes(x=time, y=value, group=variable)) + geom_line()

参见:ggplot美学


2
另一个选择是使用 aes_string

1
一旦您达到50个声望,您就可以在其他人的帖子下发表评论。您可以在此处查看完整的特权列表:http://stackoverflow.com/help/privileges - SysDragon
对我来说,这似乎完全相反了。 ;) - Chris
1
我猜这是为了避免垃圾留言和自我推广的评论。 - biocyberman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接