plotr三维着色

plotr三维着色,r,rgl,R,Rgl,我正在使用rgl中的plot3d()在数据帧中使用三列样本制作三维散点图。此外,我正在使用数据框中的第四列colorby(其中每个样本取值,例如10、11、12作为因子/级别)为绘图中的点上色 当使用plot()进行二维绘图时,我首先设置调色板(彩虹(3)),然后在plot()中设置col=colorby,然后设置legend()。情节、颜色和图例都很好 但是,当我为plot3d()重复最后一部分时,颜色会混淆,并且不会将相同的颜色分配到与plot()中相同的级别。此外,如果我使用legend3

我正在使用
rgl
中的
plot3d()
在数据帧中使用三列样本制作三维散点图。此外,我正在使用数据框中的第四列
colorby
(其中每个样本取值,例如10、11、12作为因子/级别)为绘图中的点上色

当使用
plot()
进行二维绘图时,我首先设置
调色板(彩虹(3))
,然后在
plot()
中设置
col=colorby
,然后设置
legend()
。情节、颜色和图例都很好

但是,当我为
plot3d()
重复最后一部分时,颜色会混淆,并且不会将相同的颜色分配到与
plot()
中相同的级别。此外,如果我使用
legend3d(“topright”,legend=levels(colorby),col=rainbow(3))
创建图例,它看起来与2D图例相同,但3D绘图中的颜色明显错误


我哪里做错了

这在我看来是正确的:

df <- data.frame(x=1:9, y=9:1, z=101:109, colorby=gl(3,3))
palette(rainbow(3))
plot(x~y, df, col = df$colorby)
library(rgl)
with(df, plot3d(x,y,z, col = colorby))
legend3d("topright", legend = levels(df$colorby), col = levels(df$colorby), pch=19)

df确实很好用。我注意到,对于我的
legend3d()
code,我使用了
col=1:length(df$colorby)
,这与使用
col=levels(df$colorby)
相比,给出了一个不同且不正确的图例。知道为什么吗?这是两个不同的向量。你为什么期望它们是一样的?你的答案是1:9,卢卡的答案是c(“1”,“2”,“3”)。第二个是字符向量这一事实并不重要,它们包含不同的值这一事实才重要。