绘制数据框的3列中的2列

时间:2018-03-18 11:11:35

标签: r dataframe plot coordinate two-columns

我有一个由400行x,y和z值组成的数据框,我想在x列上绘制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)

任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

如果需要在球体表面上绘制随机点,则只需提取极坐标即可。这样的事情:

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)

答案 1 :(得分:0)

我将您的函数创建的数据框命名为datadata <- sample3d(400))。

然后,如果您需要X和Y列的散点图(指向x和y坐标),则可以使用基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)
})