我不会用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()
是否可以完成而不将其转换为数据框?
答案 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()