【问题标题】:How to plot a matrix with ggplot [closed]如何用ggplot绘制矩阵[关闭]
【发布时间】:2019-11-23 23:10:34
【问题描述】:

我不想用 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()

这可以在将其转换为数据框的情况下完成吗?

【问题讨论】:

  • 不,不是 ggplot2。是的,带有基本图形(例如,请参阅 help("image"))。
  • 我投票决定将此问题作为题外话结束,因为在函数 ggplot 的帮助下清楚地说明了对象需要是一个 data.frame,因此这个问题不应该是。

标签: r matrix ggplot2


【解决方案1】:

作为 Roland cmets,没有。 ggplot::ggplot() 采用 data.frame 或可以通过 fortify() 运行的对象来创建一个。

但是,您的转换步骤可以通过调用 reshape2::melt 来简化,它负责将 matrix 对象转换为 data.frames。您可能可以在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()

【讨论】:

  • 这并没有增加 OPs 问题:输入矩阵,输出 ggplot。
  • 我同意你@zx8754。
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2015-06-08
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多