2014-04-25 134 views
0

说我已经创建了一个测试矩阵4 * 4矩阵:创建彩色矩阵R中

varieties = c("A", "B", "C", "D") 
matVar = matrix(c(1,5,3,4,8,5,2,8,9,4,6,5,3,7,3,2), nrow = length(varieties), ncol = length(varieties)) 

我有一个矩阵,如下所示:

 [,1] [,2] [,3] [,4] 
[1,] 1 8 9 3 
[2,] 5 5 4 7 
[3,] 3 2 6 3 
[4,] 4 8 5 2 

如何创建一个R中的热图图像使得行和列被命名为品种(A,B,C,D),并且颜色按该品种组合之间的值进行分级?

我曾尝试以下:

library(reshape2) 
library(ggplot2) 
tdm <- melt(matVar) 

ggplot(tdm, aes(x = varieties, y = varieties, fill = factor(value))) + 
    labs(x = "Variety", y = "Variety", fill = "Value") + 
    geom_raster() 

并且得到错误:

Error: Aesthetics must either be length one, or the same length as the dataProblems:varieties, varieties 

任何建议表示赞赏!

+1

'heatmap(matVar)'?或者你寻找一个* ggplot2 *解决方案?在这种情况下,请用* ggplot2 *标签标记您的问题。 – sgibb

回答

3

是这样的吗?

enter image description here

library(reshape2) 
library(ggplot2) 
df <- data.frame(id=varieties,matVar) 
colnames(df)[2:ncol(df)] <- varieties 
gg <- melt(df, id="id") 
ggplot(gg, aes(x=id,y=variable,fill=value))+ 
    geom_tile()+ 
    scale_fill_gradient(low="#FFFF88",high="#FF0000")+ 
    coord_fixed() 

注:

  1. coord_fixed()使用这样的砖是正方形。
  2. scale_fill_gradient(...)用于将填充颜色设置为黄色 - 红色。其他选项查看scale_fill_gradientn(...)scale_fill_gradient2(...)的文档。
1

传递给aes()的值需要在你的数据表匹配的列名 - 在这种情况下,使用Var1Var2(由melt()默认生成的变量名),而不是variables

ggplot(tdm, aes(x = Var1, y = Var2, fill = factor(value)) + 
    labs(x = "Variety", y = "Variety", fill = "Value") + 
    geom_raster() 

如果你想要一个连续的颜色渐变而不是离散的颜色,只需使用value而不是factor(value)