我正在编写提案,需要这样的3D图:
但最好更具吸引力。我需要每个点的大小以反射(reflect)物种的丰富度,并概述通过连接这些点而创建的体积的轮廓。
样本数据:
input<-data.frame(
label=c("sp1","sp2","sp3","sp4"),
trait_x=c(6,6,6,1),
trait_y=c(7,7,7,1),
trait_z=c(8,8,8,1),
point_size=c(6,7,8,1)
)
input
label trait_x trait_y trait_z point_size
1 sp1 6 7 8 6
2 sp2 6 7 8 7
3 sp3 6 7 8 8
4 sp4 1 1 1 1
关于如何使这样的图形更具吸引力的任何建议(也许包括网格线?但是我不希望轴上有任何数字)
我玩过
scatterplot3d
,但是它并没有画出我的所有要点,我个人发现该多维数据集看起来很奇怪...好像不太准确...library(scatterplot3d)
x<-input$trait_x
y<-input$trait_y
z<-input$trait_z
scatterplot3d(x,y,z,xlim=c(0,10),ylim=c(0,10),zlim=c(0,10))
最佳答案
这应该使您开始使用rgl
包。注意:重新阅读后,我发现您使用的xyz坐标与您使用的xyz坐标稍有不同,但是概念是相同的。
input<-data.frame( # I adjusted the values for better appearance in demo
label=c("sp1","sp2","sp3","sp4"),
trait_x=c(6,7,11,1),
trait_y=c(10,7,9,1),
trait_z=c(4,7,6,1),
point_size=c(6,7,8,1)
)
names(input) <- c("name", "x", "y", "z", "radius")
input$radius <- input$radius*0.2
require("rgl")
spheres3d(input[,2:4], radius = input[,5], col = c("red", "green", "blue", "orange"), alpha = 0.5)
axes3d(box = TRUE)
title3d(xlab = "x_trait", ylab = "y_trait", zlab = "z_trait")
text3d(input[1,2:4], texts = "species X")
# next line is clunky but you can do it more elegantly
segs <- rbind(input[1:2,2:4], input[2:3,2:4], input[3:4,2:4], input[c(4,1),2:4])
segments3d(segs)
现在,您可以交互地旋转图,然后使用
rgl.snapshot
获得硬拷贝(在spheres3d中使用抗锯齿参数将改善图)。关于r - R中的引人入胜的3D图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16130025/