2016-10-25 4 views
2

В моем df у меня есть столбец, который имеет названия цветов, то есть красный, зеленый ... Я хочу использовать эти цвета для заполнения и раскраски. Однако я не могу управлять, чтобы построить его так, и черный превращается в оранжевый, желтый розовый ...Как я могу заполнить и покрасить на основе переменной

enter image description here

new.df <- structure(list(Expr = c(1, 0.75, 0.5, 0.25, 0, 1, 0.75, 0.5, 
0.25, 0, 1, 0.75, 0.5, 0.25, 0, 1, 0.75, 0.5, 0.25, 0, 1, 0.75, 
0.5, 0.25, 0, 1, 0.75, 0.5, 0.25, 0, 1, 0.75, 0.5, 0.25, 0, 1, 
0.75, 0.5, 0.25, 0), react = c(0, 0.25, 0.5, 0.75, 1, 0, 0.25, 
0.5, 0.75, 1, 0, 0.25, 0.5, 0.75, 1, 0, 0.25, 0.5, 0.75, 1, 0, 
0.25, 0.5, 0.75, 1, 0, 0.25, 0.5, 0.75, 1, 0, 0.25, 0.5, 0.75, 
1, 0, 0.25, 0.5, 0.75, 1), variable = structure(c(1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 
8L, 8L, 8L, 8L, 8L), .Label = c("black", "blue", "brown", "green", 
"pink", "red", "turquoise", "yellow"), class = c("ordered", "factor" 
)), value = c(0.230403800475059, 0.0617577197149644, 0.0843230403800475, 
0.0819477434679335, 0.0819477434679335, 0.200712589073634, 0.187648456057007, 
0.144893111638955, 0.156769596199525, 0.142517814726841, 0.0451306413301663, 
0.114014251781473, 0.125890736342043, 0.133016627078385, 0.130641330166271, 
0.328978622327791, 0.0665083135391924, 0.0902612826603325, 0.0973871733966746, 
0.0855106888361045, 0.194774346793349, 0.0605700712589074, 0.0451306413301663, 
0.0700712589073634, 0.0653206650831354, NA, 0.0617577197149644, 
0.0605700712589074, 0.0795724465558195, 0.0783847980997625, NA, 
0.336104513064133, 0.0617577197149644, 0.0819477434679335, 0.0617577197149644, 
NA, 0.111638954869359, 0.0498812351543943, 0.168646080760095, 
0.0831353919239905)), row.names = c(NA, -40L), .Names = c("Expr", 
"react", "variable", "value"), class = "data.frame") 
> scal <- scale_colour_manual(name = "variable", values = new.df$variable) 
> ggplot(new.df, aes(x = value, fill = variable)) + 
+  facet_wrap(~Expr+react, labeller = label_wrap_gen(multi_line = FALSE)) + 
+  geom_histogram(bins = 5) + theme_bw() + scal 

По this ответ я попытался вручную создать цветовую гамму, без успех.

ответ

1

Вам просто нужно изменить одну строку кода:

scal <- scale_fill_manual(values = unique(as.character(new.df$variable))) 

и сохранить оставшуюся часть:

ggplot(new.df, aes(x = value, fill = variable)) + 
    facet_wrap(~Expr+react, labeller = label_wrap_gen(multi_line = FALSE)) + 
    geom_histogram(bins = 5) + theme_bw() + scal 

, чтобы получить этот результат:

enter image description here

+0

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

+0

ОК не беспокойтесь, это было просто замечание. Главное, о чем мы должны заботиться, это предоставить адекватный ответ сообществу;) Я просто «разочарован». Я потратил драгоценное время на помощь OP как в разделе комментариев, так и в чате SO, тогда OP решила принять эквивалентный ответ, который полностью справедлив в соответствии с регулированием SO. –

0

Попробуйте

new.df$variable <- ordered(new.df$variable, levels = unique(new.df$variable)) 

ggplot(new.df, aes(x = value, fill = variable)) + 
facet_wrap(~Expr+react, labeller = label_wrap_gen(multi_line = FALSE)) + 
geom_histogram(bins = 5) + theme_bw() + 
scale_fill_manual(name = "variable", 
        values = unique(as.character(new.df$variable))) 

Затем повторно выполнить команду ggplot.

Ps: есть опечатка в коде, я думаю, что вы написали

values = new.df$variables 

вместо values = new.df$variable

+0

Я пытался, но он не работает (даже с опечаткой исправленного). Почему его порядок влияет на цвета ggplot2? – Llopis

+0

'scale_colour_manual (name =" variable ", values ​​= unique (new.df $ variable))' –

+0

Нет, он не работает – Llopis