2014-11-29 5 views
0

У меня есть образец dataframe который выглядит следующим образом:R: Назначение цветов значения/цвета градиента палитры

reg1 <- structure(list(REGION = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("REG1", "REG2"), class = "factor"),STARTYEAR = c(1959L, 1960L, 1961L, 1962L, 1963L, 1964L, 1965L, 1966L, 1967L, 1945L, 1946L, 1947L, 1948L, 1949L), ENDYEAR = c(1960L, 1961L, 1962L, 1963L, 1964L, 1965L, 1966L, 1967L, 1968L, 1946L, 1947L, 1948L, 1949L, 1950L), Y_START = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, 2L), Y_END = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L), COLOR_VALUE = c(-969L, -712L, -574L, -312L, -12L, 1L, 0L, -782L, -999L, -100L, 23L, 45L, NA, 999L)), .Names = c("REGION", "STARTYEAR", "ENDYEAR", "Y_START", "Y_END", "COLOR_VALUE"), class = "data.frame", row.names = c(NA, -14L)) 

    REGION STARTYEAR ENDYEAR Y_START Y_END COLOR_VALUE 
1 REG1  1959 1960  0  1  -969 
2 REG1  1960 1961  0  1  -712 
3 REG1  1961 1962  0  1  -574 
4 REG1  1962 1963  0  1  -312 
5 REG1  1963 1964  0  1   -12 
6 REG1  1964 1965  0  1   1 
7 REG1  1965 1966  0  1   0 
8 REG1  1966 1967  0  1  -782 
9 REG1  1967 1968  0  1  -999 
10 REG2  1945 1946  2  3  -100 
11 REG2  1946 1947  2  3   23 
12 REG2  1947 1948  2  3   45 
13 REG2  1948 1949  2  3   NA 
14 REG2  1949 1950  2  3   999 

я создаю сюжет с функцией rect(), которая работает отлично.

xx = unlist(reg1[, c(2, 3)]) 
yy = unlist(reg1[, c(4, 5)]) 
png(width=1679, height=1165, res=150) 
if(any(xx < 1946)) {my_x_lim <- c(min(xx), 2014)} else {my_x_lim <- c(1946, 2014)} 
plot(xx, yy, type='n', xlim = my_x_lim) 
apply(reg1, 1, function(y) 
    rect(y[2], y[4], y[3], y[5])) 
dev.off() 

В моих данных reg1 У меня есть 6-й столбец, который содержит значение между +1000 и -1000. Мне было интересно, есть ли способ, чтобы я мог покрасить прямоугольники в свой сюжет в соответствии с моими значениями цвета. Низкие значения должны быть голубыми, значения около 0 должны приводить к красному значению белого и высокого значения (если нет значения или нет, тогда должен быть нанесен серый).

Мой вопрос: Как создать цветовую палитру, которая находится в диапазоне от 1000 до -1000 (от красного до белого до синего) и применить ее к моему сюжету, чтобы каждый прямоугольник окрашивался в соответствии с значением цвета?

+0

2000 цветов является излишеством. Можете ли вы жить меньше? – ECII

ответ

2

Вот как вы получаете цветовой рамп и сопоставляете его в кадре данных.

my.colors<-colorRampPalette(c("blue", "white", "red")) #creates a function my.colors which interpolates n colors between blue, white and red 
color.df<-data.frame(COLOR_VALUE=seq(-1000,1000,1), color.name=my.colors(2001)) #generates 2001 colors from the color ramp 
reg1.with.color<-merge(reg1, color.df, by="COLOR_VALUE") 

Я не могу помочь вам с rect() черчения, я никогда не использовал его

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