通过rgl R包的plot3d函数生成的3D绘图可以轻松区分多个组

时间:2016-05-10 23:31:28

标签: r plot 3d rgl

example of the 3D plot i got in result我有23个不同的组,每个组由7到20个单独的样本(总共大约350-400个观察结果)组成,它们有自己的x,y和amp; z坐标。我想通过plot3d rgl R函数的pch函数,根据我的数据生成3D图。一般而言,这不是什么大问题。问题是,我想让上面提到的23组中的每一组在3D图上容易区分。我尝试为每个组使用不同的颜色,但不幸的是,找不到人眼可以辨认的23种颜色。我正在考虑基本plot库的R函数中的plot3d参数。但是,再次,我可以看到text3d函数中没有这样的选项。此外,我必须解释一下,我的数据集中有太多的点,并且为每个点添加标签(例如,使用# 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) rgl函数)不是一个好主意(它们将彼此重叠并且给予在3D情节上导致某种混乱)。有没有办法搞清楚(我猜这是非常常见的问题)?提前谢谢!
下面是一些玩具示例的代码,以便更好地解释:

{{1}}

3 个答案:

答案 0 :(得分:3)

如果你喜欢生活在最前沿,那么有一个新功能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)

生成此显示(在一些调整大小和旋转之后):

enter image description here

答案 1 :(得分:1)

这不完美,但如何使用字母a-w来区分群体呢?

  with(df,plot3d(x,y,z))
  with(df,text3d(x,y,z,texts=letters[titles_2]))

enter image description here

答案 2 :(得分:0)

因为我打算将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)])

colored 3D plot