R中使用rgl plot3d绘制3D散点图 - 如何为每个数据点设置不同的大小?

6

我正在使用

plot3d(x,y,z, col=test$color, size=4) 

我想使用R绘制我的数据集的三维散点图,但是使用rgl时,size参数只能接受一个大小。

是否可能为每个数据点设置不同的大小,也许使用另一个库,或者有简单的解决方法吗?

感谢您的建议!


有一个可重现的例子会很棒:with(iris, plot3d(Sepal.Length, Sepal.Width, Petal.Length, col=Species)) - Etienne Low-Décarie
1
这似乎不起作用:iris$num<-rownames(iris)with(iris, plot3d(Sepal.Length, Sepal.Width, Petal.Length, col=Species))library(plyr) d_ply(.data=iris, .variables="num", function(x) {points3d(x=x$Sepal.Length, y=x$Sepal.Width, z=x$Petal.Length, size=x$Petal.Width)}) - Etienne Low-Décarie
2个回答

6
这里提供一种与Etienne建议类似的解决方法。关键思路是先设置图形,然后使用单独的 points3d() 调用函数在每个大小区间中绘制点。
# Break data.frame into a list of data.frames, each to be plotted 
# with points of a different size
size <- as.numeric(cut(iris$Petal.Width, 7))
irisList <- split(iris, size)

# Setup the plot
with(iris, plot3d(Sepal.Length, Sepal.Width, Petal.Length, col=Species, size=0))

# Use a separate call to points3d() to plot points of each size
for(i in seq_along(irisList)) {
    with(irisList[[i]], points3d(Sepal.Length, Sepal.Width, 
                                 Petal.Length, col=Species, size=i))
}

(FWIW,似乎没有直接使用plot3d()实现这一点的方法。问题在于plot3d()使用辅助函数material3d()设置点大小,如下所示,material3d()只想要一个单一的数值。)
material3d(size = 1:7)
# Error in rgl.numeric(size) : size must be a single numeric value

非常感谢Etienne和Josh,至少看来我不是唯一在这方面挣扎的人。是否有人知道是否有其他软件包可以提供这个功能,因为我认为它非常有用? - Jack Smith
1
嗯。解决方法对你不起作用吗?你在3D图中需要什么功能?如果你需要动态图形(例如鼠标旋转/缩放),隐藏线删除,光照效果等等,那么你几乎只能使用rgl。否则,你可以尝试类似于scatterplot3d的东西。可以想象,rgl可以被黑客攻击/更新以允许有效的每点大小规格,但值得知道为什么值得这样做... - Ben Bolker
非常感谢您的帮助,很抱歉回复晚了!我知道只是使用了tet来标记点,因为调整大小太复杂了。如果有一个维度再多一些就好了,但也许那样会太过繁琐了... - Jack Smith

1

以防其他人在几年后遇到此问题,现在完全可以将变量传递到大小参数中,例如:with(test, plot3d(x,y,z, col=test$color, size=test$size))

实际上,您可以对传递给大小的数据进行操作,它也可以正常工作。我成功地使用了类似于 size = x/(max(x,na.rm=TRUE)-min(x,na.rm=TRUE)) 的基本大小比例。

虽然 material3d 只接受单个数字值,但应先评估 with 语句中传递给大小的表达式或变量,因此 material3d 对于每个绘制点仍然只会看到单个大小值。只是提醒一下,因为我花了大约一个小时左右尝试这里发布的解决方法,然后才意识到它是不必要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接