子集和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。