我尝试用不同颜色绘制带有抖动点的条形图。我可以使用geom_segment绘制绘图,但我想使用抖动点而不是线(段)。这是我的代码:
dat = read.table(text="chromosome size
1 640851
2 947102
3 1067971
4 1200490
5 1343557
6 1418242
7 1445207
8 1472805
9 1541735
10 1687656
11 2038340
12 2271494
13 2925236
14 3291936", header=T, stringsAsFactors=F)
pos = read.table(text="Chromosome Position
3 817702
5 1041685
11 488717
12 1556936
13 1131566
14 1776463", header=T, stringsAsFactors=F)
mark <- data.frame()
for (i in 1:nrow(pos)){
df <- data.frame(Chr=rep(pos$Chromosome[i],100),Pos=sort(sample.int(pos$Position[i],100)))
mark <- rbind(mark,df)
}
mark <- mark[order(mark$Chr,mark$Pos),]
pp <- replicate(6, diff(c(0, sort(runif(2)), 1)))
pp <- round(pp %*%diag(pos$Position),0)
pp[2,] <- pp[2,] +pp[1,]
pp[3,] <- pp[2,]+pp[3,]
type <- replicate(6,sample(LETTERS[1:3],3))
for (i in 1:length(unique(mark$Chr))){
for (j in 1:100){
if (mark$Pos[(i-1)*100+j] >0 & mark$Pos[(i-1)*100+j] <= pp[1,i]) {mark$Type[(i-1)*100+j] <- type[1,i]}
if (mark$Pos[(i-1)*100+j] >pp[1,i] & mark$Pos[(i-1)*100+j] <= pp[2,i]) {mark$Type[(i-1)*100+j] <- type[2,i]}
if (mark$Pos[(i-1)*100+j] >pp[2,i] & mark$Pos[(i-1)*100+j] <= pp[3,i]+1) {mark$Type[(i-1)*100+j] <- type[3,i]}
}
}
使用细分绘制条形图:
ggplot(data=dat, aes(chromosome, size)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black")) +
geom_bar( stat="identity", fill="grey70") +
geom_segment(data=mark, aes(x=Chr-0.45, xend=Chr+0.45, y=Pos,
yend=Pos, colour=Type), size=2)
我想绘制带有抖动点的条形图。当我使用geom_point替换geom_segment时。抖动实际上是“dat”数据而不是“mark”数据。这不是我想要的。我想在“标记”数据上设置带有抖动点的条形图。 这是我用来绘制情节的代码:
ggplot(data=dat, aes(chromosome, size)) +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black")) +
geom_bar( stat="identity", fill="grey70") +
geom_point(data=mark, aes(x=Chr, y=Pos, colour=Type), size=1) + geom_jitter(width=0.5)
感谢您的帮助。