2

我有一个数据框,它包含该日期的日期和状态。状态范围从-1到2。我想创建一个热图(按星期几和一年中的星期几分组),这不是问题。

我的问题是我想要以下颜色映射:

-1 => gray
0 => white
1 => blue
2 => green

有任何想法吗?。谢谢!

编辑: 按照我会做的方式要求下面的示例代码,它对我不起作用:

breaks <- seq(-2,2,1)
pal <- c("gray","white","green","blue")
data <- sample(-1:2, 5*6, replace=T)
m <- matrix(unlist(data),ncol=6)
m
image(m,
      col = c("gray","white","green","blue"),
      breaks = c(-2,-1,0,1,2)
      )
4

2 回答 2

2

您可以尝试包中的heatmap.2()功能gplots并创建自己的调色板,例如

my_palette <- c("gray","white","green","blue"),然后您将其用作参数的col参数

heatmap.2(..., col = my_palette, ...

假设您对数据进行了适当的缩放。

在我的《 R 中的热图:操作方法》一书中,我非常简要地触及了自定义热图颜色的主题。但是,使用当前的软件包并没有真正“好”的解决方案,但它更像是变通方法:(

于 2013-06-27T05:46:08.523 回答
1

以下似乎可以满足您的要求:

set.seed(14)
a<-matrix(floor(runif(21)*4)-1,nrow=7)
col<-c("grey","white","blue","green")
image(1:8,1:4,a,col=col)

对于 gplot 版本:

#color scale
col<-c("red","orange","grey","lightblue","darkblue")
#creating the dataframe for 3 example weeks
(d<-t(matrix(c(1,1,2,3,2,3,4,
    2,1,2,2,3,4,4,
    5,3,2,4,5,4,5),nrow=3,byrow=TRUE)))
df<-data.frame(day=rep(1:7,3),week=rep(1:3,each=7),werte=as.numeric(d))
#the ggplot
p<-ggplot(df,aes(x=day,y=max(df$week)+1-week))+
    #tile layer
    geom_tile(aes(fill=factor(werte))) +
    #setting the color
    scale_fill_manual(
        values=col,
        breaks=c("1","2","3","4","5"),
        labels=c("one","two","three","four","five"))

p
于 2013-06-27T06:05:28.187 回答