子集和ggplot2

我有一个问题,用ggplot2绘制一个数据框的子集。 我的df就像:

ID Value1 Value2 P1 100 12 P1 120 13 ... P2 300 11 P2 400 16 ... P3 130 15 P3 140 12 ... 

我现在如何绘制Value1和Value2仅用于ID P1和P3? 例如,我试过:

 ggplot(subset(df,ID=="P1 & P3") + geom_line(aes(Value1, Value2, group=ID, colour=ID))) 

但我总是收到一个错误。

PS我也尝试了许多与P1和P3的组合,但我总是失败..

这里有两个子集选项:

使用来自基础R的subset

 library(ggplot2) ggplot(subset(dat,ID %in% c("P1" , "P3"))) + geom_line(aes(Value1, Value2, group=ID, colour=ID)) 

使用subset geom_line的参数(注意我使用plyr包来使用特殊的函数)。

 library(plyr) ggplot(data=dat)+ geom_line(aes(Value1, Value2, group=ID, colour=ID), ,subset = .(ID %in% c("P1" , "P3"))) 

您也可以使用补充子集:

 subset(dat,ID != "P2") 

你在寻找下面的情节:

 library(ggplot2) l<-df[df$ID %in% c("P1","P3"),] myplot<-ggplot(l)+geom_line(aes(Value1, Value2, group=ID, colour=ID)) 

在这里输入图像说明

还有另一个解决scheme,我觉得很有用,特别是当我想绘制同一个对象的多个子集时:

 myplot<-ggplot(df)+geom_line(aes(Value1, Value2, group=ID, colour=ID)) myplot %+% subset(df, ID %in% c("P1","P3")) myplot %+% subset(df, ID %in% c("P2")) 

你的表述几乎是正确的。 你要:

 subset(dat, ID=="P1" | ID=="P3") 

哪里| ('pipe道')的意思是“或”。 您的解决scheme, ID=="P1 & P3" ,正在寻找一种情况下,ID是字面上"P1 & P3"

在@ agstudy的答案中的选项2现在已经被弃用了,用函数定义数据可能会很方便。

 library(plyr) ggplot(data=dat) + geom_line(aes(Value1, Value2, group=ID, colour=ID), data=function(x){x$ID %in% c("P1", "P3")) 

如果您希望在同一图表中重复使用数据集,例如,您不想在data.frame中指定新的列,或者想要明确地绘制一个图层中的一个数据集,则此方法派上用场。

 library(plyr) ggplot(data=dat, aes(Value1, Value2, group=ID, colour=ID)) + geom_line(data=function(x){x[!x$ID %in% c("P1", "P3"), ]}, alpha=0.5) + geom_line(data=function(x){x[x$ID %in% c("P1", "P3"), ]}) 

尝试过滤到只有P1和P3的行的子集

 df2 <- filter(df, ID == "P1" | ID == "P3") 

比哟可以积Value1。 vs Value2。