在R中按颜色创建矩阵

时间:2014-04-25 17:41:11

标签: r image matrix

假设我已经创建了一个测试矩阵4 * 4矩阵:

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

感谢任何建议!

2 个答案:

答案 0 :(得分:2)

这样的东西?

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 :(得分:0)

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

variables

如果您想要连续的颜色渐变而不是离散颜色,只需使用ggplot(tdm, aes(x = Var1, y = Var2, fill = factor(value)) + labs(x = "Variety", y = "Variety", fill = "Value") + geom_raster() 代替value