【问题标题】:Converting a contour plot from standard R to ggplot将等高线图从标准 R 转换为 ggplot
【发布时间】:2020-03-29 14:05:51
【问题描述】:

我正在努力寻找如何将标准 R 中的等高线图转换为 ggplot2 中的等高线图。

在 R 中,函数轮廓的参数是 2 个值向量和一个要绘制的值矩阵。

例如,考虑以下代码

X=seq(from=1,to=100,length=100)
Y=seq(from=300,400,length=100)

M=matrix(NA,100,100)

for (i in seq_along(X)){
  for (j in seq_along(Y)){
    M[i,j]=log(j)*sqrt(i)
  }
}

contour(X,Y,M)

M 是一个 100x100 矩阵,每个条目是 X 和 Y 中每个元素的函数。此代码不会产生错误

现在我正在努力将此示例转换为 ggplot。

我试试下面的代码

d=data.frame(X,Y,M)
ggplot(d,aes(x=X,y=Y,z=M))+stat_contour()

现在在我看来,变量 z 通常也是一个长度为 100 的向量。我觉得我需要做的是为 Y 中的每个元素重复向量 X,并为 X 中的每个元素重复向量 Y,这样 X 和 Y 的长度都是 100x100=10,000 个元素。但这对我来说似乎不对,我也不知道该怎么做。有没有更简单的方法可以从 R 轮廓转换为 ggplot 轮廓?

非常感谢。

【问题讨论】:

    标签: r ggplot2 contour


    【解决方案1】:

    ggplot 库喜欢“整洁”格式的数据。在这种情况下,X、Y 和 Z 各有 3 列。

    解决这个问题的关键是获取 X 和 Y 的所有组合并将你的 M 方阵转换为向量。 expand.grid 函数将生成所有 X&Y 组合的数据框

    X=seq(from=1,to=100,length=100)
    Y=seq(from=300,400,length=100)
    
    M=matrix(NA,100,100)
    
    for (i in seq_along(X)){
      for (j in seq_along(Y)){
        M[i,j]=log(j)*sqrt(i)
      }
    }
    
    contour(X,Y,M)
    
    #create all of the combinations of x&y
    d<-expand.grid(X, Y)
    names(d)<-c("X", "Y")
    
    #Convert from a square matrix to a single vector
    d$M<-matrix(M, ncol=1)
    
    library(ggplot2)
    ggplot(d, aes(x=X, y=Y ,z=M))+stat_contour()
    

    【讨论】:

      猜你喜欢
      • 2015-04-30
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多