首页 > 解决方案 > 如何在 barplot r 上的 geom_point 中使用抖动

问题描述

我试图用不同颜色的抖动点绘制条形图。我可以用 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)

谢谢你的帮助。

标签: rggplot2

解决方案


推荐阅读