【问题标题】:Assigning stable colors to ggplot2 bar plot with a layer使用图层为 ggplot2 条形图分配稳定的颜色
【发布时间】:2015-05-19 17:24:58
【问题描述】:

我正在寻找一种方法来控制条形图中各部分的颜色,以便在我绘制数据子集时它们保持稳定。 我已经看到了这个解决方案: 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))

非常感谢!

【问题讨论】:

  • 最好提供一些示例数据供其他人测试您的代码
  • 谢谢,阿克伦。请看我的编辑

标签: r plot ggplot2


【解决方案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)

【讨论】:

  • 谢谢,Uri Obolski - 这正是我想要的!我一直都知道我可以信任互联网 :)
【解决方案2】:

我认为这是你需要的:

#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()

【讨论】:

  • 感谢 zx8754,但我想将它放在单独的图中(主要是为了获得列之间相同高度的效果)...
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 2016-04-13
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多