首页 文章

使用图层为ggplot2条形图指定稳定的颜色

提问于
浏览
1

我正在寻找一种方法来控制条形图中各部分的颜色,以便在我绘制数据的子集时它们是稳定的 . 我见过这个解决方案:How to assign colors to categorical variables in ggplot2 that have stable mapping?

这看起来很有希望,但我似乎无法将其应用于我的数据 . 我怀疑这与我正在使用的图层有关 .

我生成图的代码是:

plot = ggplot(subdata,mapping = aes(x = as.factor(group))) +
        layer(geom = "bar", mapping = aes(fill = as.factor(NUM_MOTIFS)))

我可以获得完整数据集的级别,但是当我尝试将其添加到绘图中时,我不断收到此错误:

Error: Aesthetics must either be length one, or the same length as the dataProblems:as.factor(NUM_MOTIFS)

无论我把它放在哪里......任何想法?

编辑:示例数据:

fulldata = data.frame(group = rep("A",10), NUM_MOTIFS = c(0,0,1,1,1,2,2,2,4,5))
subdata = data.frame(group = rep("B",8), NUM_MOTIFS = c(0,0,1,1,2,2,2,2))

非常感谢!

2 回答

  • 1

    我认为这样做会有所帮助 . 请注意,您可以为'cbbPalette'(some examples)选择其他值 .

    fulldata = data.frame(group = rep("A",10), NUM_MOTIFS = c(0,0,1,1,1,2,2,2,4,5))
    subdata = data.frame(group = rep("B",8), NUM_MOTIFS = c(0,0,1,1,2,2,2,2))
    fulldata$NUM_MOTIFS=as.factor(as.character(fulldata$NUM_MOTIFS))
    subdata$NUM_MOTIFS=as.factor(as.character(subdata$NUM_MOTIFS))
    
    levels(subdata$NUM_MOTIFS)=levels(fulldata$NUM_MOTIFS)
    
    cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
    
    ggplot(subdata,mapping = aes(x = as.factor(group),fill=NUM_MOTIFS)) +geom_bar()+
      scale_fill_manual(values=cbbPalette)
    
    
    ggplot(fulldata,mapping = aes(x = as.factor(group),fill=NUM_MOTIFS)) +geom_bar()+
      scale_fill_manual(values=cbbPalette)
    
  • 0

    我想这就是你需要的:

    #dummy data
    fulldata = data.frame(group = rep("A",10), NUM_MOTIFS = c(0,0,1,1,1,2,2,2,4,5))
    subdata = data.frame(group = rep("B",8), NUM_MOTIFS = c(0,0,1,1,2,2,2,2))
    
    #merge full and subset data for plotting
    df <- rbind(fulldata,subdata)
    df$NUM_MOTIFS <- as.factor(df$NUM_MOTIFS)
    
    #plot
    ggplot(df,aes(group,fill=NUM_MOTIFS)) + geom_bar()
    

    enter image description here

相关问题