R 如何旋转三维散点图

R 如何旋转三维散点图,r,3d,rotation,scatter-plot,R,3d,Rotation,Scatter Plot,下面是一段代码,它使用scatterplot3d()函数运行高度、重量和体积的三维散点图,其中点是介于1-6之间的类值。角度目前为45度,我知道我可以通过改变角度来倾斜绘图。我使用什么代码向左或向右旋转绘图,以便提供绘图的多个视图 df # Class height weight volume # 1 4 0.83 0.85 0.83 # 2 2 0.75 0.80 0.76 # 3 3

下面是一段代码,它使用scatterplot3d()函数运行高度、重量和体积的三维散点图,其中点是介于1-6之间的类值。角度目前为45度,我知道我可以通过改变角度来倾斜绘图。我使用什么代码向左或向右旋转绘图,以便提供绘图的多个视图

df
#    Class   height     weight    volume
# 1    4     0.83         0.85      0.83
# 2    2     0.75         0.80      0.76
# 3    3     0.75         0.80      0.84
# 4    5     0.52         0.59      1
# 5    6     0.52         0.59      0.99

 color <- c(rgb(0.68, 0.93, 0.96), rgb(0, 0.74, 0.92), rgb(0.68, 0.86, 0.49), rgb(1, 0.8, 0.3), 
 rgb(1, 0, 0))
 scatterplot3d(x=c(0.0, 0.5, 0.5, 0, 0), y=c(0, 0, 0.5, 0.5, 0), z=c(0, 0, 0, 0, 0), box=T, type='l', 
 color='grey', grid=F, lwd=2, xlab='height', ylab='', zlab='volume', xlim=c(0, 1), ylim=c(0, 1), 
 zlim=c(0,1), angle=45)
 text(7, 0, 'weight', srt=45)
 par(new=T)

 scatterplot3d(x=c(0.0, 0.5, 0.5, 0.0, 0.0), y=c(0.5, 0.5, 1, 1, 0.5), z=rep(0,5), box=F, type='l', 
 color='grey', grid=F, lwd=2,xlab='', ylab='', zlab='', xlim=c(0, 1), ylim=c(0, 1), zlim=c(0,1), 
 axis=F, angle=45)
 par(new=T)

 scatterplot3d(x=c(0.5, 1, 1, 0.5, 0.5), y=c(0.0, 0.0, 0.5, 0.5, 0.0), z=rep(0,5), box=F, type='l', 
 color='grey', grid=F, lwd=2,
          xlab='', ylab='', zlab='', xlim=c(0, 1), ylim=c(0, 1), zlim=c(0,1), axis=F, angle=45)
 par(new=T)

 scatterplot3d(x=c(0.5, 1, 1, 0.5, 0.5), y=c(0.5, 0.5, 1, 1, 0.5), z=rep(0,5), box=F, type='l', 
 color='grey', grid=F, lwd=2,
          xlab='', ylab='', zlab='', xlim=c(0, 1), ylim=c(0, 1), zlim=c(0,1), axis=F, angle=45)
 par(new=T)

 for (i in 6:2) {

 scatterplot3d(height[Class==i], weight[Class==i], volume[Class==i], box=F, pch=c(2,1,0,1,20)[i-1], 
 color=color[i-1], grid=F,
            xlab='', ylab='', zlab='', xlim=c(0, 1), ylim=c(0, 1), zlim=c(0, 1), axis=F, angle=45)
 par(new=T)
 }
 legend(0.2, 4.7, legend=c(paste('Level', 2:6)), pch=c(2,1,0,1,19), col=color, title='Class', 
 cex=0.70)
df
#班级身高体重体积
# 1    4     0.83         0.85      0.83
# 2    2     0.75         0.80      0.76
# 3    3     0.75         0.80      0.84
# 4    5     0.52         0.59      1
# 5    6     0.52         0.59      0.99

color以下是两种数据视图。您应该始终使用
dput()
将数据粘贴到问题中,以便我们可以轻松访问:

dfa <- structure(list(Class = c(4L, 2L, 3L, 5L, 6L), height = c(0.83, 
     0.75, 0.75, 0.52, 0.52), weight = c(0.85, 0.8, 0.8, 0.59, 0.59),
     volume = c(0.83, 0.76, 0.84, 1, 0.99)), class = "data.frame",
     row.names = c("1", "2", "3", "4", "5"))

请注意,我们估计y轴标签的位置,并使用函数将三维坐标转换为二维坐标以进行打印。现在我们将进行135度旋转:

plt <- with(dfa, scatterplot3d(height, weight, volume, xlim=c(0, 1), ylim=c(0, 1),
     zlim=c(0, 1), ylab="", color=color, pch=c(2, 1, 0, 1, 20), grid=FALSE,
     scale.y=.75, angle=135))
plt$points3d(x=c(0, 1), y=c(0.5, 0.5), z=c(0, 0), type="l", col="grey")
plt$points3d(x=c(0.5, 0.5), y=c(0, 1), z=c(0, 0), type="l", col="grey")
xy <- unlist(plt$xyz.convert(-0.2, .5, 0))
text(xy[1], xy[2], "weight", srt=-45, pos=4)
legend(0.2, 4.7, legend=c(paste('Level', 2:6)), pch=c(2,1,0,1,19), col=color,
     title='Class', cex=0.70)

plt
angle=
参数会旋转绘图。尝试45、135、225和315以查看差异。你不能将x=0,y=0放在绘图的后面,但你可以从左向右旋转180度。谢谢你的建议,并对现在才回复表示歉意,我直到现在才有权使用R进行尝试。我一直在玩弄你建议的各种角度,但情节完全扭曲了。我应该更改代码中每个“angle=”的角度,还是只是其中的一部分?你提到我不能把x=0,y=0放在绘图的后面,我必须改变代码吗?如果是这样,我不确定我必须把它改成什么?非常感谢你的建议。我不知道你想做什么。您的代码使相同的绘图重复4次。如果你改变每个图的角度,你会得到4个相同数据的不同视图。如果这不是你想要做的,你必须更具体。嗨,所有这些代码只生成一个绘图。以scatterplot3d()开头的代码的前几部分是在立方体的底部/地板上生成轴和4个灰色象限。最后一段以scatterplot3d()开头的代码将点带入scatterplot。如果我将所有的“角度=45”替换为“角度=225”,它就会失真。也许还需要添加另一行代码,使绘图向左或向右?这太棒了!非常感谢你花时间写这篇文章。关于“pos=”的最后一个问题。如果我想做225度旋转,我会写srt=-45,但我不确定“pos=”的数字是多少。我不确定“pos=”的编号在旋转度方面是如何应用的?这是一种尝试和错误。默认设置(0)将文本直接居中于点上。然后pos=1位于中心下方,2位于中心左侧,3位于中心上方,4位于中心右侧。感谢您的帮助!非常感谢。
plt <- with(dfa, scatterplot3d(height, weight, volume, xlim=c(0, 1), ylim=c(0, 1),
     zlim=c(0, 1), ylab="", color=color, pch=c(2, 1, 0, 1, 20), grid=FALSE,
     scale.y=.75, angle=135))
plt$points3d(x=c(0, 1), y=c(0.5, 0.5), z=c(0, 0), type="l", col="grey")
plt$points3d(x=c(0.5, 0.5), y=c(0, 1), z=c(0, 0), type="l", col="grey")
xy <- unlist(plt$xyz.convert(-0.2, .5, 0))
text(xy[1], xy[2], "weight", srt=-45, pos=4)
legend(0.2, 4.7, legend=c(paste('Level', 2:6)), pch=c(2,1,0,1,19), col=color,
     title='Class', cex=0.70)