我有一个数据框(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对作为散点图上的单独系列进行图形化?
答案 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"))