R ggplot具有多个标志

R ggplot具有多个标志,r,ggplot2,flags,qa,R,Ggplot2,Flags,Qa,我有一个基本数据集,其中包括几个标志: library(ggplot2) X<-c(seq(1:10)) Y<-c(2,4,6,3,5,8,6,5,4,3) Flag1<-c(0,0,0,0,1,0,0,1,0,0) Flag2<-c(0,0,0,0,60,0,0,0,0,60) Flag3<-c(12,0,12,12,12,12,12,0,0,12) Flag4<-c(0,0,0,0,40,0,0,40,0,0) DF<-data.frame(X,Y

我有一个基本数据集,其中包括几个标志:

library(ggplot2)
X<-c(seq(1:10))
Y<-c(2,4,6,3,5,8,6,5,4,3)
Flag1<-c(0,0,0,0,1,0,0,1,0,0)
Flag2<-c(0,0,0,0,60,0,0,0,0,60)
Flag3<-c(12,0,12,12,12,12,12,0,0,12)
Flag4<-c(0,0,0,0,40,0,0,40,0,0)

DF<-data.frame(X,Y,Flag1,Flag2,Flag3,Flag4)
每个标志类型1-4包含0或该标志类型特定的数字。我的目标是将上述x/y数据绘制为基本线图

p<-ggplot(DF, aes(x=X, y=Y)) +geom_line() +geom_point(col='black', size=1)
而不是在绘图上覆盖点来标记我有旗帜的地方。理想情况下,标志点会稍大一些,并且每种标志类型都会有不同的颜色


我的一些标志点将重叠,因此我不确定处理这种情况最美观的方法是什么,可能是偏移以防止点重叠?

您可以尝试将数据从宽改为长,即为标志类型和标志值创建列。然后,您可以按标志类型着色,并使用大小作为标志值。避免重叠的一种方法是几何抖动

结果:

另一种选择是使用facet_grid按标志类型进行单独绘图

library(data.table)
library(ggplot2)

X<-c(seq(1:10))
Y<-c(2,4,6,3,5,8,6,5,4,3)
Flag1<-c(0,0,0,0,1,0,0,1,0,0)
Flag2<-c(0,0,0,0,60,0,0,0,0,60)
Flag3<-c(12,0,12,12,12,12,12,0,0,12)
Flag4<-c(0,0,0,0,40,0,0,40,0,0)

DF<-data.frame(X,Y,Flag1,Flag2,Flag3,Flag4)

DF.long <- melt(DF, measure.vars=c("Flag1","Flag2","Flag3","Flag4"), variable="Flag")
然后可以按如下方式绘制:

p <- ggplot(DF.long, aes(x=X, y=Y)) +geom_line() +geom_jitter(size=2, aes(y=value, color=Flag))
geom_line将从原始ggplot调用继承X和Y,并且geom_jitter设置为具有其自己的不同Y值,即上例中名为value的列,每个标志具有唯一的颜色:

编辑:啊,值作为与值相对应的大小,这实际上更直观,我误解了

按照neilfws的建议,使用大小=值:

p2 <-ggplot(DF.long, aes(x=X, y=Y)) +geom_line() +geom_jitter(aes(size=value, color=Flag))
p <- ggplot(DF.long, aes(x=X, y=Y)) +geom_line() +geom_jitter(size=2, aes(y=value, color=Flag))
p2 <-ggplot(DF.long, aes(x=X, y=Y)) +geom_line() +geom_jitter(aes(size=value, color=Flag))