2016-06-13 48 views
0

我使用的日历热图(discussion和源GitHub日历热图:颜色不符合规定

一般的agstudy的修改,代码工作很不错,但我无法让我的颜色代码工作。 Example

在示例中,前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") 

_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 
} 

我无法找出颜色转移的原因,并与预期的颜色代码不匹配。有没有人有一个想法可能是什么原因?

+0

我还没有使用过这个包,但我是https://github.com/Ather-Energy/ggTimeSeries的作者,它有另一个可以使用的日历热图。 – TheComeOnMan

+0

感谢您的咨询!我会看看它。 – ABC123

+0

因为我也需要热图中的符号,所以我更喜欢当前问题的解决方案,而不是使用不同的热图。 – ABC123

回答

0

最后,我发现它是如何工作:

在我第一次尝试我分配的每个星期的日子升序排列的单个数字从1到24,即第一周的天数值设为1,第二周至第二天的天数等等。名单colorMicro包含24个颜色,应该对应个别星期。该列表多次包含颜色。

在我的第二次尝试我用相同的颜色分配所有天数相同的数字。同时我将相应的颜色放在列表colorMicro中。这样,每种颜色在列表中只出现一次,并且与日历中出现的数字的顺序相同。变量ncolors我设置了一个很大的数字,现在一切正常。 Example

鉴于R以外的数据生成,但由于某种原因,它不起作用,第一种方式对我来说更容易。 知道这个事实,第二种方法也很容易,并导致适当的绘图行为。现在可以根据自由意愿为每天或每周分配预定义的颜色,这正是我需要的。也许这对其他人也有用。