2010-06-20 16 views
28

Кто-нибудь знает, как использовать предварительно определенную цветовую палитру в ggplot?Использование предопределенной цветовой палитры в ggplot

У меня есть вектор цветов Я хотел бы использовать:

rhg_cols <- c("#771C19", "#AA3929", "#E25033", "#F27314", "#F8A31B", 
       "#E2C59F", "#B6C5CC", "#8E9CA3", "#556670", "#000000") 

Но когда я пытаюсь передать его ни к чему не произошло

ggplot(mydata, aes(factor(phone_partner_products)), color = rhg_cols) + 
    geom_bar() 

ответ

25

Вы должны поместить colour = rhg_cols внутри aes(). Насколько я могу судить, вы хотите применить градиент к барам (в barplot) с переменной фактором по абсциссе? Затем с помощью fill - попробуйте вместо этого:

ggplot(mydata, aes(factor(phone_partner_products), fill = factor(phone_partner_products))) + 
    geom_bar() + 
    scale_fill_manual(values = rhg_cols) 

или попытаться достичь приблизительную реплику с:

ggplot(mydata, aes(factor(phone_partner_products), fill = phone_partner_products))) + 
    geom_bar() + 
    scale_fill_gradient(low = "#771C19", hi = "#000000") 

Обратите внимание, что во втором случае непрерывная переменная передается fill эстетики, поэтому scale_fill_gradient передается позже. Если вы передаете factor к fill ОПЗ вы должны придерживаться scale_fill_manual(values = rhg_cols)

+1

Он должен быть «высоким», а не «привет» на scale_fill_gradient (low = «# 771C19», hi = «# 000000»). – Eduardo

9

Сначала нужно добавить, цвета в наборе данных:

mydata$col <- rhg_cols 

Затем карта цвета в этой колонке и использовать scale_colour_identity

ggplot(mydata, aes(factor(phone_partner_products, colour = col))) + 
    geom_bar() + 
    scale_colour_identity() 
+0

ммм ... первая линия имеет некоторые проблемы ... У меня есть по крайней мере 800 строк и цвета только 10 > MYDATA $ цв <- rhg_cols Ошибка в '$ <-. Data.frame' ('* tmp *', "col", value = c ("# 771C19", "# AA3929",: замена имеет 10 строк, данные имеют 865 –

+0

и, конечно, фактор (phone_partner_products) возвращает только 5 элементов, поэтому палитры из 10 цветов должно быть достаточно. –

+1

О, это палитра. Вот почему воспроизводимый код всегда полезен. – hadley

18

Если цвета палитры, используйте scale_colour_manual:

ggplot(mydata, aes(factor(phone_partner_products), colour = colour_variable)) + 
    scale_colour_manual(values = rhg_cols) 
+0

Это указывало мне в правильном направлении, однако аргумент 'scale_colour_manual()' должен был быть 'values ​​= .. .', чтобы заставить его работать. – mvds

8

Поскольку цвета вы хотите ARE значения в цветовой эстетики, что вы действительно хотите Масштабирует identity, в этом случае scale_fill_identity.

ggplot(mydata, aes(factor(phone_partner_products)), color=rhg_cols) + 
    geom_bar() + 
    scale_fill_identity()) 

Поскольку вы не предоставили данные, я собираюсь использовать немного другой пример, используя цветовую информацию:

rhg_cols <- c("#771C19","#AA3929","#E25033","#F27314","#F8A31B", 
       "#E2C59F","#B6C5CC","#8E9CA3","#556670","#000000") 
mydata <- sample(rhg_cols, 100, replace = TRUE) 
qplot(mydata, fill = mydata) + 
    scale_fill_identity() 

enter image description here


примечание: я опустил + opts(axis.text.x=theme_text(angle=90)) для ясности в примере.

Смежные вопросы