R:在ggplot中分配手动颜色会将自身限制为几种颜色

时间:2018-09-26 15:17:07

标签: r ggplot2 colors bar-chart

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

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)

进行默认分配时, I get a wide color range。 但是,我需要手动分配基于组的颜色。当我使用scale_fill_manual()和相应的向量I get only 8 different colors in the plot进行此操作时,这对于我的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一起使用

2 个答案:

答案 0 :(得分:0)

我想我知道问题出在哪里,但是对我来说,为什么会出现此错误并没有多大意义。始终确保在数据框上运行str()以了解数据。

即使您在数据框中重复了一个字符向量,它也被强制转换为22级的因子。

如果在调用ggplot之前或在as.character()中直接在df$Farben上运行scale_fill_manual,应该可以解决此问题。

但是再次,我不明白为什么当您传递一个因子向量而不是字符向量时,ggplot会这样做,这可能与参数values期望传递给它有关。

答案 1 :(得分:0)

将调色板更改为palette(Nutzfarben)就可以了! 为了完整性:在p+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()提示。