4

我在用

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

用 R 绘制我的数据集的 3d 散点图,但rgl参数size只需要一种大小。

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

谢谢你的想法!

4

2 回答 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
于 2012-04-27T00:27:57.910 回答
1

以防万一其他人在几年后偶然发现,现在完全可以将变量传递给 size 参数,例如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每个绘图点仍然应该只看到一个大小值。只是提醒一下,因为我花了一个小时左右摆弄这里发布的解决方法,然后才意识到这是不必要的。

于 2018-02-21T14:57:08.567 回答