将等高线图从标准 R 转换为 ggplot
Converting a contour plot from standard R to ggplot
我正在努力寻找如何将标准 R 中的等高线图转换为 ggplot2 中的等高线图。
在 R 中,函数 contour 的参数是 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 轮廓?
非常感谢。
ggplot 库喜欢 "tidy" 格式的数据。在这种情况下,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()
我正在努力寻找如何将标准 R 中的等高线图转换为 ggplot2 中的等高线图。
在 R 中,函数 contour 的参数是 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 轮廓?
非常感谢。
ggplot 库喜欢 "tidy" 格式的数据。在这种情况下,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()