R: Назначение ручных цветов в ggplot ограничивает себя несколькими цветами - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу назначить определенные цвета для моего барплота в каждой группе с помощью 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() и соответствующим вектором , я получаю только 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

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Изменение цветовой палитры на 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().

0 голосов
/ 26 сентября 2018

Мне кажется, я знаю, в чем проблема, но мне не имеет особого смысла, почему возникает эта ошибка.Всегда убедитесь, что вы запускаете str() в вашем фрейме данных, чтобы понять данные.

, даже если вы повторили символьный вектор в вашем фрейме данных, он был приведен к фактору с 22 уровнями.

Если вы запускаете as.character() на df$Farben перед вызовом ggplot или прямо в scale_fill_manual, это должно решить проблему.

Но, опять же, я не понимаю, почему ggplot делает это, когда вы передаете факторвектор, в отличие от символьного вектора, вероятно, что-то связанное с тем, какой аргумент values ожидает передачи ему.

...