Переопределение цветов по умолчанию в диаграмме ggplot

Я новичок в R и пытаюсь изменить цвета сгенерированной диаграммы. введите здесь описание изображения

 p = ggplot(plasma1, aes(x=Day, y=Control, colour=Supp))
 + theme(panel.background = element_rect(fill='white', colour='black'))
 + geom_point(size=2, shape=21) 
 + geom_errorbar(aes(ymin=Control-SEMcontrol, ymax=Control+SEMcontrol), width=1)

 p + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) 
 + xlab("X") + ylab("Y") + geom_line(linetype="dashed")

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


person David Sigley    schedule 01.09.2015    source источник
comment
Посмотрите в scale_color_manual.   -  person Heroka    schedule 01.09.2015
comment
как насчет использования аргумента colour в geom_line   -  person pcantalupo    schedule 01.09.2015
comment
Попробуйте добавить +scale_color_manual(values=c(C="red",N="black")) к определению ggplot.   -  person jlhoward    schedule 01.09.2015
comment
geom_line не нуждается в цвете, @pcantalupo, он наследует aes от основного вызова ggplot.   -  person Heroka    schedule 01.09.2015
comment
как упомянул @jlhoward, scale_colour_manual(), но также и scale_colour_brewer() для более читаемых цветов, если вы не привязаны к красному, синему и черному. См. документацию.   -  person Alex W    schedule 01.09.2015
comment
есть также пакет ggthemes с другими цветовыми шкалами (например, tableau)   -  person hrbrmstr    schedule 01.09.2015
comment
@jlhoward Спасибо! Это сработало. Не могли бы вы написать это как ответ, пожалуйста, чтобы я мог принять его.   -  person David Sigley    schedule 01.09.2015


Ответы (1)


Примечание. Соглашение о SO заключается в том, что «ответы» зарезервированы для воспроизводимого кода, демонстрирующего решение. Все, что меньше (например, предложение), относится к комментариям. Вот почему так важно, чтобы спрашивающие предоставляли свои данные как часть вопроса; в противном случае нам придется что-то компенсировать за вас, чего большинство людей (оправданно) не хотят делать.

Ответ, который вы просили, приведен ниже, но прежде чем перейти к этому, вы должны знать, что цветовая схема по умолчанию ggplot тщательно выбрана, поэтому вам следует менять ее только в том случае, если есть веская причина. Проблема в том, что человеческая эволюция привела к тому, что определенные цвета (например, красный) получили усиление восприятия по сравнению с другими цветами. Таким образом, если у вас есть красная кривая и черная кривая, красная кривая оставляет более сильное «впечатление». Этот факт широко используется в определенных областях (например, в рекламе) для психологического манипулирования зрителем, но ему нет места в визуализации научных данных. ggplot значения по умолчанию, основанные на цветовой системе HCL (которая, в свою очередь, основана на цветовой системе Munsell), попытайтесь достичь двух целей: создать цветовую палитру, в которой каждый цвет максимально отличим от всех других цветов, и выровнять относительное воздействие на восприятие. Существует довольно техническое обсуждение этой темы здесь и несколько хороших примеров здесь.

Итог: не меняйте цвета, если у вас нет для этого действительно веской причины.

Сказав все это, простой ответ на ваш вопрос — использовать scale_color_manual(...), как показано ниже:

# all this to set up the example - you have this already
set.seed(1)    # for reproducible example
x <- rep(c(1,2,4,8,11,14), each=5)
df1 <- data.frame(Day=x,Control=125*(1-exp(-x/5))+rnorm(30,sd=25),Supp="N")
df2 <- data.frame(Day=x,Control=90*(1-exp(-x/3))+rnorm(30,sd=25),Supp="C")
plasma1 <- aggregate(Control~Day+Supp,rbind(df2, df1), FUN=function(x)c(Control=mean(x),SEMcontrol=sd(x)/sqrt(length(x))))
plasma1 <- data.frame(plasma1[,1:2],plasma1[[3]])

# you start here
library(ggplot2)
ggp <- ggplot(plasma1, aes(x=Day, y=Control, color=Supp))+
  geom_point(size=3, shape=21)+
  geom_line(linetype="dashed")+
  geom_errorbar(aes(ymax=Control+SEMcontrol, ymin=Control-SEMcontrol), width=0.3)+
  theme_bw()+theme(panel.grid=element_blank())
ggp + scale_color_manual(values=c(C="red",N="black"))

Что производит это:

Как упоминалось в одном из комментариев, вы также можете использовать одну из палитр Брюера, разработанных профессором Синтией Брюэр из Университета штата Пенсильвания. . Первоначально они предназначались для картографических приложений, но стали широко использоваться в научной визуализации.

ggp + scale_color_brewer(palette="Set1")

person jlhoward    schedule 01.09.2015
comment
Спасибо за интересные комментарии. - person David Sigley; 02.09.2015