绘制数据框 3 列中的 2 列
Plotting 2 out of 3 columns of a data frame
我有一个包含 400 行 x、y 和 z 值的数据框,我想根据 y 列绘制 x 列。
这是我目前得到的:
sample3d = function(n)
{
df = data.frame()
while(n>0)
{
X = runif(1,-1,1)
Y = runif(1,-1,1)
Z = runif(1,-1,1)
a = X^2 + Y^2 + Z^2
if( a < 1 )
{
b = (X^2+Y^2+Z^2)^(0.5)
vector = data.frame(X = X/b, Y = Y/b, Z = Z/b)
df = rbind(vector,df)
n = n- 1
}
}
df
}
sample3d(400)
如有任何帮助,我们将不胜感激。
我将您的函数创建的数据框命名为 data
(data <- sample3d(400)
).
然后,如果你需要X和Y列的散点图(点在x和y坐标),你可以使用base R的函数plot()
。例如plot(x = data$X, y = data$Y)
。如果您像我一样不想在每一列之前键入 data$
,您可以通过将所有内容包装在 with(data = data, {...})
.
中,使列可用作向量函数
如果要创建所有三个坐标的散点图,您可能需要查看以下两个示例中的包:
library(scatterplot3d)
with(data = data, {
scatterplot3d(x = X, y = Y, z = Z)
})
library(rgl)
with(data, {
plot3d(X, Y, Z)
})
如果需要在球面上随机绘制点,只需要提取极坐标即可。类似的东西:
sample3d_v2 <- function(n) {
phi<-runif(n,0,2*pi)
cost<-runif(n,-1,1)
sint<-sqrt(1-cost^2)
data.frame(X=sint*cos(phi),Y=sint*sin(phi),Z=cost)
}
只是一些测试:
system.time(old<-sample3d(4000))
# user system elapsed
# 3.895 0.000 3.879
system.time(new<-sample3d_v2(4000))
# user system elapsed
# 0.000 0.000 0.002
如你所见,几千倍的增益。测试结果是否正确:
require(rgl)
plot3d(old)
open3d();plot3d(new)
关于您的问题:只需命名为您的函数生成的对象并绘制 X 和 Y 分量。
data<-sample3d_v2(400)
plot(data$X,data$Y)
我有一个包含 400 行 x、y 和 z 值的数据框,我想根据 y 列绘制 x 列。
这是我目前得到的:
sample3d = function(n)
{
df = data.frame()
while(n>0)
{
X = runif(1,-1,1)
Y = runif(1,-1,1)
Z = runif(1,-1,1)
a = X^2 + Y^2 + Z^2
if( a < 1 )
{
b = (X^2+Y^2+Z^2)^(0.5)
vector = data.frame(X = X/b, Y = Y/b, Z = Z/b)
df = rbind(vector,df)
n = n- 1
}
}
df
}
sample3d(400)
如有任何帮助,我们将不胜感激。
我将您的函数创建的数据框命名为 data
(data <- sample3d(400)
).
然后,如果你需要X和Y列的散点图(点在x和y坐标),你可以使用base R的函数plot()
。例如plot(x = data$X, y = data$Y)
。如果您像我一样不想在每一列之前键入 data$
,您可以通过将所有内容包装在 with(data = data, {...})
.
如果要创建所有三个坐标的散点图,您可能需要查看以下两个示例中的包:
library(scatterplot3d)
with(data = data, {
scatterplot3d(x = X, y = Y, z = Z)
})
library(rgl)
with(data, {
plot3d(X, Y, Z)
})
如果需要在球面上随机绘制点,只需要提取极坐标即可。类似的东西:
sample3d_v2 <- function(n) {
phi<-runif(n,0,2*pi)
cost<-runif(n,-1,1)
sint<-sqrt(1-cost^2)
data.frame(X=sint*cos(phi),Y=sint*sin(phi),Z=cost)
}
只是一些测试:
system.time(old<-sample3d(4000))
# user system elapsed
# 3.895 0.000 3.879
system.time(new<-sample3d_v2(4000))
# user system elapsed
# 0.000 0.000 0.002
如你所见,几千倍的增益。测试结果是否正确:
require(rgl)
plot3d(old)
open3d();plot3d(new)
关于您的问题:只需命名为您的函数生成的对象并绘制 X 和 Y 分量。
data<-sample3d_v2(400)
plot(data$X,data$Y)