Тепловая карта календаря: цвета не соответствуют указанным

Я использую модификацию календаря тепловой карты agstudy (обсуждение и источник GitHub )

В целом код работает очень хорошо, но у меня возникают проблемы с тем, чтобы мой цветовой код работал. Пример

В показанном примере первые 3 недели должны быть окрашены в красный цвет, а 4-я - в синий. Всего эта последовательность должна повториться 6 раз, т.е. должно быть 6 недель, окрашенных синим цветом (каждые 4-е).

Чтобы получить свой цветовой код, я загружаю список цветов в шестнадцатеричном коде из файла и называю его «пользователь»:

col.sty <- switch(color,
'user'=data_2$colorMicro,
'r2b'=c("#0571B0", "#92C5DE", "#F7F7F7", "#F4A582", "#CA0020"), #red to blue                                                                               
'r2g'=c("#D61818", "#FFAE63", "#FFFFBD", "#B5E384")  , #red to green
'w2b'=c("#045A8D", "#2B8CBE", "#74A9CF", "#BDC9E1", "#F1EEF6"),   #white to blue
'b2w'=grey.colors(5) )## black to white
# assign("col.sty", get(color))
calendar.pal <- colorRampPalette((col.sty), space = "rgb")

Содержимое data_2:

colorMicro
#CC0000
#CC0000
#CC0000
#00CCFF
#CC0000
#CC0000
#CC0000
#00CCFF
#CC0000
#CC0000
#CC0000
#00CCFF
#CC0000
#CC0000
#CC0000
#00CCFF
#CC0000
#CC0000
#CC0000
#00CCFF
#CC0000
#CC0000
#CC0000
#00CCFF

Это 24 цветовых значения за 24 недели, которые я хочу представить на тепловой карте. Для переменной ncolors установлено значение 24, а для cuts установлено значение ncolors-1.

Я немного изменил настройки графика уровней по сравнению с кодом из agstudy.

# major plot ------------------------------------------------------------------
 p <- levelplot(value~woty*dotw | yr, data=dat, border = "black",
            layout = c(1, nyr%%7),
            col.regions = calendar.pal(ncolors),
            aspect='iso',
            between = list(x=0, y=c(1,1)),
            strip=TRUE,
            main =varname, 
            panel = function(x,y,z,...) {
              panel.levelplot(x,y,z,...)
              ll <- list(...)
              at = pretty(dat$pvalue)
              ind.pch <- cut(dat$pvalue, at, include.lowest = TRUE, labels = FALSE)
              pch.symbols <- pch.symbol[ind.pch]
              subscripts <- ll$subscripts
              x <- x[subscripts]
              y <- y[subscripts]
              pch.symbols <-  pch.symbols[subscripts]
              a=ifelse(dat$pvalue==0,15,ifelse(dat$pvalue==1,16,ifelse(dat$pvalue==2,17,ifelse(dat$pvalue==3,18,ifelse(dat$pvalue==4,25,ifelse(dat$pvalue==5,10,ifelse(dat$pvalue==6,65,ifelse(dat$pvalue==7,66,ifelse(dat$pvalue==67,S,NA)))))))))
              b=ifelse(dat$pvalue==0,"blue1",ifelse(dat$pvalue==1,"darkorange4",ifelse(dat$pvalue==2,"red",ifelse(dat$pvalue==3,"seashell4",ifelse(dat$pvalue==4,"magenta",ifelse(dat$pvalue==5,"limegreen",ifelse(dat$pvalue>5,'yellow','black')))))))
              panel.xyplot(x, y,fill =col.symbol ,col.symbol =b,
                           pch = a, cex=cex.symbol,
                           ,  ...)
              calendar.division(...)  
            },
            scales= scales,
            cuts = ncolors-1,
            colorkey= list(at=seq(from=1, to=24, by=1), col = calendar.pal(ncolors), width = 0.6, height = 0.5),
            xlim =extendrange(dat$woty,f=0.01),
            xlab="",ylab="",
            ylim=extendrange(dat$dotw,f=0.1),
            subscripts=TRUE,
            par.settings = calendar.theme)
  p
}

Я не могу понять, почему цвета смещены и не соответствуют предполагаемому цветовому коду. Есть ли у кого-нибудь идеи, в чем может быть причина?


person ABC123    schedule 13.06.2016    source источник
comment
Я не использовал этот пакет, но я автор github.com/Ather-Energy/ggTimeSeries, у которого есть другая тепловая карта календаря, которую вы могли бы использовать.   -  person TheComeOnMan    schedule 13.06.2016
comment
Спасибо за совет! Я посмотрю на это.   -  person ABC123    schedule 13.06.2016
comment
Поскольку мне также нужны символы на тепловой карте, я бы предпочел решение текущей проблемы вместо использования другой тепловой карты.   -  person ABC123    schedule 13.06.2016


Ответы (1)


Наконец, я узнал, как это работает:

В своей первой попытке я присвоил дням каждой недели индивидуальный номер в порядке возрастания от 1 до 24. Т.е. значения дней первой недели были установлены на 1, дней второй недели на 2 и так далее. Список colorMicro содержал 24 цвета, которые должны были соответствовать отдельным неделям. Список содержал цвета несколько раз.

Во время моей второй попытки я присвоил всем дням одного цвета один и тот же номер. Одновременно помещаю соответствующие цвета в список colorMicro. Таким образом, каждый цвет появляется в списке только один раз и в том же порядке, что и числа в календаре. Переменную ncolors я выставил на большое число и теперь все работает как надо. Пример

Первый способ был для меня проще с точки зрения генерации данных вне R, но он почему-то не работает. Зная этот факт, второй способ также прост и ведет к правильному построению графика. Теперь можно по своему желанию назначать заранее определенные цвета каждому дню или неделе, что мне и нужно. Может быть, это пригодится и другим.

person ABC123    schedule 15.06.2016