在 rgl R 包的 plot3d 函数生成的 3D 图上使众多组易于区分
Posted
技术标签:
【中文标题】在 rgl R 包的 plot3d 函数生成的 3D 图上使众多组易于区分【英文标题】:Make numerous groups easily distinguishable on 3D plot produced by plot3d function of rgl R package 【发布时间】:2016-05-10 23:31:28 【问题描述】:我有 23 个不同的组,每个组由 7 到 20 个单独的样本(总共大约 350-400 个观察值)组成,它们有自己的 x、y 和 z 坐标。我想通过rgl
R
包的plot3d
函数根据我拥有的数据生成3D图。一般来说,这没什么大不了的。问题是,我想让上述 23 组中的每一组在 3D 图上易于区分。我尝试为每个组使用不同的颜色,但不幸的是,无法找到人眼可识别的 23 种颜色。我在考虑pch
参数,就像在R
库的plot
基础函数中一样。但是,正如我所见,plot3d
函数中没有这样的选项。此外,我必须解释一下,我的数据集中的点太多,并且为每个点添加标签(例如使用text3d
rgl 函数)不是一个好主意(它们会相互重叠并给出一些结果3D情节有点混乱)。有没有办法弄清楚(我想这是很常见的问题)?提前谢谢!
下面是一些玩具示例的代码以便更好地解释:
# generate data
prefix=rep("ID",69)
suffix=rep(1:23,3)
suffix_2=as.character(suffix[order(suffix)])
titles_1=paste(prefix,suffix,sep="_")
titles_2=titles_1[order(titles_1)]
x=1:69
y=x+20
z=x+50
df=data.frame(titles_2,x,y,z)
# load rgl library
library('rgl')
# make 3D plot
plot3d(x,y,z)
【问题讨论】:
【参考方案1】:如果您喜欢生活在最前沿,有一个新功能 rgl::pch3d()
使用与 points()
相同的代码绘制符号
在基础图形中。它位于 rgl
0.95.1475 中,可在 R-forge 上获得(几小时内可在 Github 上获得;参见 How do I install the latest version of rgl?)。它还不能完全与 rglwidget()
一起使用。
示例代码
open3d()
i <- 0:25; x <- i %% 5; y <- rep(0, 26); z <- i %/% 5
pch3d(x, y, z, pch = i, bg = "green")
text3d(x, y, z + 0.3, i)
pch3d(x + 5, y, z, pch = LETTERS[i+1])
text3d(x + 5, y, z + 0.3, i+65)
产生这个显示(经过一些调整大小和旋转):
【讨论】:
【参考方案2】:虽然不完美,但是用字母 a-w 来区分组怎么样?
with(df,plot3d(x,y,z))
with(df,text3d(x,y,z,texts=letters[titles_2]))
【讨论】:
感谢您的提示!现在好多了。 评论不应该用来表示感谢 - 如果答案有用,请点赞和/或接受它【参考方案3】:因为我打算将 3D 绘图用于发布目的,所以我现在使用此解决方案。它不是假装是最好的。
# generate data
prefix=rep("ID",69)
suffix=rep(1:23,3)
suffix_2=as.character(suffix[order(suffix)])
titles_1=paste(prefix,suffix,sep="_")
titles_2=titles_1[order(titles_1)]
x=1:69
y=x+20
z=x+50
df=data.frame(titles_2,x,y,z)
# load rgl library
library('rgl')
# load randomcoloR library
library(randomcoloR)
# create a custom palette
palette <- distinctColorPalette(23)
palette(palette)
# make 3D plot
plot3d(x,y,z,size = 10,col=suffix[order(suffix)])
【讨论】:
以上是关于在 rgl R 包的 plot3d 函数生成的 3D 图上使众多组易于区分的主要内容,如果未能解决你的问题,请参考以下文章