【问题标题】:3d scatterplot in R using rgl plot3d - different size for each data point?使用 rgl plot3d 在 R 中绘制 3d 散点图 - 每个数据点的大小不同?
【发布时间】:2012-04-26 21:53:21
【问题描述】:

我正在使用

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

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

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

感谢您的想法!

【问题讨论】:

  • 有一个可重现的例子真是太好了:with(iris, plot3d(Sepal.Length, Sepal.Width, Petal.Length, col=Species))
  • 这似乎不起作用:iris$num

标签: r scatter-plot rgl


【解决方案1】:

这里有一个与 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,至少看来我不是唯一一个为此苦苦挣扎的人。有人知道,是否有任何其他软件包可以提供此功能,因为我认为它非常有用?
  • 嗯。解决方法不适合您吗?您的 3D 绘图需要什么功能?如果您需要动态图形(即通过鼠标旋转/缩放)、隐藏线移除、照明效果等,那么您几乎只能使用rgl。否则你可以试试scatterplot3d。可以想象 rgl 可以被破解/更新以允许有效的每点大小规范,但值得知道为什么值得付出努力......
  • 非常感谢您的帮助,抱歉回复晚了!我知道刚刚使用 tet 来标记点,因为调整大小太复杂了。再多一维就好了,但也许无论如何都太多了……
【解决方案2】:

以防万一其他人在几年后偶然发现,现在完全可以将变量传递给 size 参数,例如with(test, plot3d(x,y,z, col=test$color, size=test$size)).

实际上,您可以对输入到 size 的数据进行操作,它也可以工作。我成功地用size = x/(max(x,na.rm=TRUE)-min(x,na.rm=TRUE)) 的方式制作了基本尺寸比例。

虽然material3d 确实只接受单个数值,但应该事先评估在 with 语句中输入大小的表达式或变量,因此material3d 仍然应该只看到每个绘制点的单个大小值.请注意,因为我花了一个小时左右摆弄此处发布的解决方法,然后才意识到这是不必要的。

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多