2015-06-11 3 views
1

Я прошу R сделать серию графиков. Однако цвета, назначенные различным переменным ggplot2, различаются в зависимости от фактических данных. Мне нужно больше последовательности В частности, я хочу:Назначение конкретных цветов для конкретных значений

ЧЕТЫРЕ быть красным ТРЕТЬЕГО быть зеленым TWO быть желтым ONE быть белым

Основываясь на предыдущих ответы я подозреваю, что мне нужно, чтобы заказать уровни. Кто-нибудь может мне помочь?

Вот некоторые примерные данные:

df<-structure(list(`id` = structure(c(3L, 3L, 3L, 3L, 3L, 2L, 
            3L, 3L, 1L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 2L, 4L, 3L, 3L, 2L, 3L, 
            2L, 4L, 2L, 4L, 3L, 3L, 2L, 3L, 4L, 3L, 3L, 2L, 3L, 3L, 4L, 3L, 
            1L, 3L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("ONE", 
                           "TWO", "THREE", "FOUR"), class = "factor"), NAME = c("0", "0.25", "0.5", 
                                      "0.75", "1", "1.25", "1.5", "1.75", "2", "2.25", "2.5", "2.75", 
                                      "3", "3.25", "3.5", "3.75", "4", "4.25", "4.5", "4.75", "5", 
                                      "5.25", "5.5", "5.75", "6", "6.25", "6.5", "6.75", "7", "7.25", 
                                      "7.5", "7.75", "8", "8.25", "8.5", "8.75", "9", "9.25", "9.5", 
                                      "9.75", "10", "10.25", "10.5", "10.75", "11", "11.25", "11.5", 
                                      "11.75", "12", "12.25")), .Names = c("id", "NAME"), row.names = c("0", 
                                                       "0.25", "0.5", "0.75", "1", "1.25", "1.5", "1.75", "2", "2.25", 
                                                       "2.5", "2.75", "3", "3.25", "3.5", "3.75", "4", "4.25", "4.5", 
                                                       "4.75", "5", "5.25", "5.5", "5.75", "6", "6.25", "6.5", "6.75", 
                                                       "7", "7.25", "7.5", "7.75", "8", "8.25", "8.5", "8.75", "9", 
                                                       "9.25", "9.5", "9.75", "10", "10.25", "10.5", "10.75", "11", 
                                                       "11.25", "11.5", "11.75", "12", "12.25"), class = c("tbl_df", 
                                                                    "tbl", "data.frame")) 

Вот код:

library(ggplot2) 
library(tidyr) 

colors <- c("red","white","yellow","green") 


df$NAME <- rownames(df) 

x<-gather(df,NAME) 
colnames(x)<-c("Name", "variable","value") 

ggplot(x, 
    aes(x = Name, y = variable, fill = factor(value))) + 
geom_tile() + 
scale_fill_manual(values=colors)+ 
scale_x_discrete(name="Time Period", limits= rownames(df)) 
+2

Единственными пакетами, которые использует ваш код, являются 'ggplot2' и' tidyr' (отредактированы). В будущем вместо '' dput (df) '... code преобразовать df в x ... вопрос о том, как построить' x', просто 'dput (x)', поскольку преобразование не имеет значения. – Gregor

+0

Грегор. Понял. Благодаря! –

+0

Мне нужно исследовать, почему этот был отмечен как дубликат. Перед публикацией я посмотрел на упомянутое решение. Это казалось близким, но не помогло мне понять, что мне нужно было понять. Я думаю, что ответ Грегора помог мне достичь моей цели на моем нынешнем уровне знаний .... –

ответ

2

Вам нужно, как вы говорите, чтобы указать порядок ваших уровней факторов:

x$value = factor(x$value, levels = c("ONE", "TWO", "THREE", "FOUR")) 
# the order of the vector you pass to levels defines the order of the factor 

Затем вам необходимо определить свой цветной вектор в том же порядке.

# "FOUR to be red THREE to be green TWO to be yellow ONE to be white" 
colors <- c("white","yellow","green","red") 

Другой подход - назвать цветной вектор (ниже), но я предпочитаю первый способ.

colors <- c("red","white","yellow","green") 
names(colors) = c("FOUR", "ONE", "TWO", "THREE") 

colors 
# FOUR  ONE  TWO THREE 
# "red" "white" "yellow" "green" 

В любом случае, ваш код построения должен работать отлично.

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