首页 > 解决方案 > R:在 ggplot 中分配手动颜色将自身限制为几种颜色

问题描述

我想使用 ggplot2 为每组的条形图分配特定的颜色。

kombi2 <- data.frame(Klimatop1,Nutzung=rep(Innenstadtdf[,1],6),GV_Anteil1,Farben=rep(Nutzfarben,6))
p <- ggplot(data=kombi2,aes(x=Klimatop1,y=GV_Anteil1,fill=Nutzung))+
  geom_bar(stat="identity")
p+scale_fill_manual(values=kombi2$Farben)

采用默认分配时, 我得到了一个很宽的颜色范围。但是我需要手动分配基于组的颜色。当我使用scale_fill_manual()相应的向量执行此操作时,我在 plot 中只得到 8 种不同的颜色,这对于我的 22 个不同的组来说是不够的。这是一些示例代码,它给出了与上述代码相同的颜色问题:

Nutzfarben1 <- c("#333333","#FFCC00","#FF6666","#33FFFF","#FFFFFF","#00FF33","#99CC00","#FF9933","#66CC00","#CC0033","#FFFF00","#666600","#999999","#99FF00","#0033CC","#CCCCCC","#333300","#CC9900","#99CC99","#006633","#FFCCCC","#993366")
Nutzfarben <- c("dimgray","darkorange","deeppink","aquamarine","floralwhite","springgreen4","green3","lemonchiffon2","moccasin","firebrick3","goldenrod1","palegreen4","lightslategray","lawngreen","cyan4","azure3","darkolivegreen","lightsalmon4","mediumseagreen","forestgreen","bisque","darkorchid")
df <- data.frame(one=rep(c(1:22),6),two=rep(c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v"),6),three=1:132, Farben=rep(Nutzfarben1,6))
g <- ggplot(data=df,aes(x=one,y=three,fill=two))+
  geom_bar(stat="identity")
g+scale_fill_manual(values=df$Farben)

我已经尝试使用一些组成的数据,我还尝试将数据分配为十六进制 rgb 向量,以及 r 颜色名称,并且未加载除 ggplot2 之外的所有包。你有别的想法吗?我错过了设置值吗?我需要另一个包裹吗?我的问题可能在 R 之外吗?我将 R 版本 3.5.1 与 RStudio 1.1.453 一起使用

标签: rggplot2colorsbar-chart

解决方案


改变调色板就palette(Nutzfarben)可以了!为了完整性:使用简单向量 inp+scale_fill_manual(values=Nutzfarben)而不是引用包含每行颜色分配的列也很重要p+scale_fill_manual(values=Farben)。所以代码必须改成这样:

Nutzfarben <- c("dimgray","darkorange","deeppink","aquamarine","floralwhite","springgreen4","green3","lemonchiffon2","moccasin","firebrick3","goldenrod1","palegreen4","lightslategray","lawngreen","cyan4","azure3","darkolivegreen","lightsalmon4","mediumseagreen","forestgreen","bisque","darkorchid")
palette(Nutzfarben)
kombi2 <- data.frame(Klimatop=Klimatop1,Nutzung=rep(Innenstadtdf[,1],6),GV_Anteil=GV_Anteil1,Farben=rep(Nutzfarben,6))

p <- ggplot(data=kombi2,aes(x=Klimatop,y=GV_Anteil,fill=Nutzung))+
      geom_bar(stat="identity",colour="white")
p+scale_fill_manual(values=Nutzfarben)

没有必要使用命名向量。感谢@aosmith 提供palette()提示。


推荐阅读