如何使用ggplot2组织和绘制一个数据框中的多个数据系列?

时间:2013-04-10 16:35:39

标签: r ggplot2 melt

我有一个数据框(df1),格式为:

           x1         y1         x2          y2
1 0.745779796  0.5728328 2.04029482 -0.71989471
2 0.008949224  0.8318262 1.01426596  1.20956795
3 2.390108913  0.8041999 1.63621459  0.19979352
4 1.478310218 -0.7179949 1.52394275  0.96091747
5 1.051357060  0.9700232 0.00546977  0.03604669
6 0.123499864  2.0340036 0.08231778  1.29889103

我最难使用ggpplot 2创建一个散点图,它包含系列1(y1 vs x1)和2(y2 vs x2)。我试过melt数据框,以便在aes()中使用“因子”,但我确定我使用了熔化错误,并且无法弄清楚原因如下:

df<-melt(df,id.var)

我的主要问题是:是否有更简单的方法来组织这些数据,以便在一个ggplot命令中,我可以将每个x-y对作为散点图上的单独系列进行图形化?

1 个答案:

答案 0 :(得分:3)

这是基础包中的解决方案。但我很确定这是reshape的工作。这是一个解决方案,使用按列进行子集化并创建2个data.frames和rbind来聚合data.frame。

data <-  do.call(rbind,lapply(1:2,function(i)
   {
     res <- data.frame(dat[,paste0(c('x','y'),i)],group=i)
     setNames(res,nm=c('x','y','group'))
   }))
rbind(head(data,3),tail(data,3))
             x          y group
1  0.745779796 0.57283280     1
2  0.008949224 0.83182620     1
3  2.390108913 0.80419990     1
41 1.523942750 0.96091747     2
51 0.005469770 0.03604669     2
61 0.082317780 1.29889103     2

然后我使用geom_line这样绘制它:

ggplot(data)+
  geom_line(aes(x=x,y=y,col=factor(group),group=group))

编辑重塑形式的解决方案

dat.reshape <- reshape(dat, direction="long",  varying=list(c(1, 3), c(2, 4)), 
                       sep="", v.names=c("x", "y"))
ggplot(dat.reshape)+
  geom_line(aes(x=x,y=y,col=factor(time),group=time))+
  scale_color_discrete(name  ="Line Type",
                   breaks=c(1, 2),
                   labels=c("Woman", "Man"))

enter image description here