Цветная столбчатая диаграмма с уникальным цветом для каждого столбца в ggplot - PullRequest
1 голос
/ 21 февраля 2020

Я хотел бы создать гистограмму с накоплением в ggplot, где каждый из столбцов (и столбцов с накоплением) имеет уникальный цвет, используя предоставленное шестнадцатеричное значение.

Например, возьмите этот кадр данных.

Pct <- c(0.8026200, 0.1973800, 0.8316421, 0.1683579)
Site <- c("A","A","B", "B")
hex <- c("#53412F", "#B4A383", "#4E3B29", "#B6A37E")
bin <- rep(c(1,2), 2)

df <- as.data.frame(cbind(Site,Pct,hex,bin))

Я хотел бы использовать шестнадцатеричные цвета, заданные для окраски соответствующих полос.

Я пробовал варианты по этим линиям:

ggplot()+
  geom_bar(aes(y=Pct, x=as.character(Site), fill=bin), data=df, stat="identity")+
  theme_bw() +
  scale_fill_manual("Subject", values=df$hex)

, но это приводит к зеленому и красный цвет для каждого сюжета?

Любая помощь будет принята с благодарностью. Извините, если это простое решение - у меня нет большого опыта работы со сложенными столбиками.

Заранее спасибо!

1 Ответ

2 голосов
/ 21 февраля 2020

Ваша проблема проистекает из небольшого противоречия: я думаю, вы говорите ggplot, чтобы приписать эстетику c "fill" с помощью переменной "bin". Поскольку у «bin» есть только две возможности («1» или «2»), ggplot использует только 2 цвета. Он использует два первых цвета: зеленый и красный.

Я не уверен, что именно вы хотите, но если вы хотите, чтобы для каждого столбца был свой цвет, вам нужно либо изменить «bin», как в Пример ниже, или чтобы дать другой аргумент «fill», например, вы можете просто заменить «fill = bin» на «fill = hex». Но если вы хотите 4 цвета, тогда переменная, используемая в «заливке», должна иметь 4 разных значения (ниже я выбрал «bin», а значения - 1,2,3,4).

Пример :

Pct <- c(0.8026200, 0.1973800, 0.8316421, 0.1683579)
Site <- c("A","A","B", "B")
hex <- c("#53412F", "#B4A383", "#4E3B29", "#B6A37E")

##bin is defined in order it has a different value for each bar
bin <- c(1,2,3,4)
df <- as.data.frame(cbind(Site,Pct,hex,bin))

ggplot()+
  geom_bar(aes(y=Pct, x=as.character(Site), fill=bin)
           , data=df, stat="identity")+
  theme_bw() +
  scale_fill_manual(values=hex)

Результат:

enter image description here

Надеюсь, это прояснит вашу проблему!

...