Задание цветов бара в барплоте ggplot - PullRequest
1 голос
/ 20 января 2020

У меня есть барплот с 30 колоннами. Я хочу дать первым 19 заданный цвет, а остальные - другой цвет. (См. Таблицу ниже). enter image description here

Я пытался создать вектор цветов. Я указал имена столбцов на графике;

AMR_antibiotics <- c("AMIK", "GEN", "AMC", "AMP", "IMI", "P.T4", "FAZ", "FOV", "POD", "TAZ", "LEX", "CHL", "ENRO", "MAR", "ORB", "PRA", "DOX", "TET", "SXT", "AMOX", "AMPIC", "OXA", "PEN", "CEZ", "CPZ", "CEQ", "K.C", "MAF", "PIR", "ERY")

Затем я попытался использовать следующий код для назначения цветов;

AMR_colours <- c(AMIK:SXT="steelblue", AMOX:ERY="coral3")

Затем я бы добавил AMR_colours в мой код ggplot, используя scale_fill_manual (values ​​= AMR_colours)

Это не сработало, потому что попытка сделать это с приведенным выше кодом совершенно неправильно? Я думал, что это будет более простой способ, вместо того, чтобы go вручную проходить через каждый столбец и повторять одни и те же цвета?

Если это абсолютно неправильно, любое толчок в правильном направлении будет высоко ценится! :)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 20 января 2020

Вы должны сделать вектор цветов и присвоить имена:

AMR_colours = c(rep("steelblue",19),rep("coral3",11))
names(AMR_colours) = AMR_antibiotics

Для иллюстрации:

df = data.frame(x=rep(AMR_antibiotics,3),
y=runif(3*length(AMR_antibiotics)),VAR=rep(1:3,each=length(AMR_antibiotics)))

df$x = factor(df$x,levels=AMR_antibiotics)

ggplot(df,aes(x=x,y=y,fill=x))+
geom_col()+
facet_wrap(~VAR,ncol=1)+
scale_fill_manual(values=AMR_colours)

enter image description here

Как видите, легенда слишком длинная, поэтому, если вы хотите суммировать их как AMIK:SXT и AMOX:ERY, вы можете попробовать:

df$fill = ifelse(df$x %in% AMR_antibiotics[1:19],"AMIK:SXT","AMOX:ERY")
fill_two = c("AMIK:SXT"="steelblue", "AMOX:ERY"="coral3")
ggplot(df,aes(x=x,y=y,fill=fill))+
    geom_col()+
    facet_wrap(~VAR,ncol=1)+
    scale_fill_manual(values=fill_two)
0 голосов
/ 20 января 2020

Не могли бы вы добавить новый столбец в фрейм данных с указанием соответствующего цвета.

#List the first 19 as colour 1, and the second 11 as colour 2
AMR_antibiotics <- data.frame("Antibiotic" = c("AMIK", "GEN", "AMC", "AMP", "IMI", "P.T4", "FAZ", "FOV", "POD", "TAZ", "LEX", "CHL", "ENRO", "MAR", "ORB", "PRA", "DOX", "TET", "SXT", "AMOX", "AMPIC", "OXA", "PEN", "CEZ", "CPZ", "CEQ", "K.C", "MAF", "PIR", "ERY"),
                             "colour" = c(rep(1,19), rep(2,11)))

#Bind this new lookup table to your original data using the appropriate column name. 

NewData <- full_join(Origin_data, AMR_antibiotics , by = c( "OriginData Column Name","Antibiotic"))

#Plot using colour as an aesthetic on geom_bar
ggplot(...)+
 geom_bar(aes(...,color = colour))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...