Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中有吸引力的3D绘图_R_Graphics_3d_Plot_Gridlines - Fatal编程技术网

在R中有吸引力的3D绘图

在R中有吸引力的3D绘图,r,graphics,3d,plot,gridlines,R,Graphics,3d,Plot,Gridlines,我正在写一份提案,需要一个3D绘图,如下所示: 但最好是更有吸引力。我需要每个点的大小来反映物种的丰富度,以及通过连接点创建的体积轮廓 样本数据: 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

我正在写一份提案,需要一个3D绘图,如下所示:

但最好是更有吸引力。我需要每个点的大小来反映物种的丰富度,以及通过连接点创建的体积轮廓

样本数据:

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

这应该让您开始使用包
rgl
。注意:重新阅读后,我发现我使用的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)

input您能展示一下您尝试过的吗?当然,现在就添加它。它更像是一个插图而不是一个精确的绘图吗?如果上面只有四个斑点,那么使用图形包来绘制可能会更容易。另一个选项是rgl软件包,它可以制作动态3d图形。这只是一个说明概念的例子。话虽如此,我想找到一些东西,表明我已经准备好分析更复杂的东西,如果需要的话。非常漂亮!谢谢你,布莱恩。你知道吗,不是用直线连接每个点的中心,而是显示这些点在3D空间中创建的体积(即所谓的凸面外壳体积…基本上是在所有点周围放置收缩包装,并显示点所占据的空间“云”),抱歉,我的解释有点粗糙。你知道我的意思吗?我知道你在说什么,但从来没有做过。我很确定它是在许多软件包中实现的:
install.packages(“sos”);图书馆(“sos”);findFn(“凸面外壳”)
。但请记住,你们的点实际上是围绕着一个点的球体,所以仔细想想这样的收缩包装在科学上代表了什么。根据你的维度和球体大小的含义,也许像椭球体这样的东西更合适(但我提到这一点主要是因为我知道怎么做!)。没错。你已经回答了我的问题,但我现在要厚着脸皮问你如何将椭球体应用到现有的图形中,去掉轴上的数字。:)选中
?axes3d
看起来像设置
ticks=FALSE
,或者一些参数组合将为您提供一个简单的边界框。使用椭球体假设所有这些点都是相同空间/参数的独立度量(但我认为你的是为演示而设计的,所以你可以称它们为独立的!)。但是,要做到这一点,
install.packages(“ChemoSpec”);库(“ChemoSpec”)
然后查看
?生成椭球体
如果您将点传递给该函数,您将获得封闭椭球体的xyz坐标,您可以使用
点3d
将其添加到
rgl
绘图中,并将点绘制得非常小,或者使用透明度。
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)