我在用
plot3d(x,y,z, col=test$color, size=4)
用 R 绘制我的数据集的 3d 散点图,但rgl
参数size
只需要一种大小。
是否可以为每个数据点设置不同的大小,或者使用另一个库,或者是否有简单的解决方法?
谢谢你的想法!
我在用
plot3d(x,y,z, col=test$color, size=4)
用 R 绘制我的数据集的 3d 散点图,但rgl
参数size
只需要一种大小。
是否可以为每个数据点设置不同的大小,或者使用另一个库,或者是否有简单的解决方法?
谢谢你的想法!
这是与 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
以防万一其他人在几年后偶然发现,现在完全可以将变量传递给 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
每个绘图点仍然应该只看到一个大小值。只是提醒一下,因为我花了一个小时左右摆弄这里发布的解决方法,然后才意识到这是不必要的。