如何用ggplot绘制矩阵

时间:2019-07-15 09:09:10

标签: r matrix ggplot2

我不会用ggplot绘制矩阵。

以下是一些示例代码:

# create a dummy matrix
d2 <- matrix(data=NA,nrow=21,ncol=21,dimnames=list(-10:10,-10:10))
sig <- 3;  mx <- 0; my <- 0;
for (jr in as.numeric(dimnames(d2)[[1]])){
  for (jc in as.numeric(dimnames(d2)[[2]])){
    d2[jr+11,jc+11] <- 1/sig/(2*pi)^.5*exp(-((jr-mx)^2+(jc-my)^2)/2/sig^2)
  }
}

# convert it to dataframe
d2.df <- data.frame(x=rep(as.numeric(dimnames(d2)[[1]]),each=ncol(d2)),y=rep(as.numeric(dimnames(d2)[[2]]),times=nrow(d2)),z=as.vector(d2))

# plot with geom_tiles
library(ggplot2)
ggplot(data=d2.df,aes(x=x,y=y,fill=z))+
  geom_tile()

enter image description here

是否可以完成而不将其转换为数据框?

1 个答案:

答案 0 :(得分:2)

罗兰评论说,不。 ggplot::ggplot()使用一个data.frame或一个对象,该对象或对象无法通过fortify()运行来创建一个对象。

但是,可以通过调用reshape2::melt来简化转换步骤,该调用可以将matrix对象转换为data.frame s。您也许可以在tidyr中找到一些对您有所帮助的内容,但几年来我一直没有去找。参见:

d2.df <- reshape2::melt(d2, c("x", "y"), value.name = "z")
head(d2.df)
ggplot(data=d2.df,aes(x=x,y=y,fill=z))+
  geom_tile()