首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何给scatter3d添加积分?

如何给scatter3d添加积分?
EN

Stack Overflow用户
提问于 2019-06-12 22:22:04
回答 1查看 758关注 0票数 0

我正在尝试使用R的交互式"rgl“包在同一个3D散点图中绘制两组点

以下是数据:

代码语言:javascript
复制
> head(tsne_train)
           X1         X2          X3
2   18.940912 -46.761145 -56.1818708
4   17.768953  68.678871   0.8070582
6   -2.440751 -53.021051  55.0437596
7   44.740812  -2.347877 -54.1501468
8  -87.924687  15.354890 -30.1806330
12  21.991465  38.406572 -33.0551010`

> head(tsne_test)
          X1         X2          X3
1   1.585156  71.568255    7.438958
3  62.204021  -3.817038  -37.609328
5   5.422276 -21.855152   66.865478
9  21.223133 -29.763255 -107.832779
10  9.037427 -62.816717   65.560664
11 24.775047 -51.820532   57.106795

这就是我到目前为止所尝试的:

代码语言:javascript
复制
scatter3d( x=tsne_train[,1],y=tsne_train[,2],z=tsne_train[,3],
          groups = train$Result,
          surface=F, grid = T, ellipsoid = FALSE,sphere.size = 1.5,
          surface.col = c("red", "orange", "green"),fogtype="none",
          axis.col=c("black","black","black"))

产生:

代码语言:javascript
复制
scatter3d(x=tsne_test[,1],y=tsne_test[,2],z=tsne_test[,3], groups = test$Result,
                surface=F, grid = T, ellipsoid = FALSE,sphere.size = 1.5,
                col = c("purple", "blue", "cyan"), fogtype="none",
                axis.col=c("black","black","black"))

产生:

我希望所有的点在一个散点图中,但保留颜色分组(总共6种颜色)。有点像将地块2覆盖在地块1上

使用spheres3d向绘图中添加更多的点会导致这种混乱:

代码语言:javascript
复制
spheres3d(x=tsne_test[,1],y=tsne_test[,2],z=tsne_test[,3],
         surface=F, grid = T,
         col = c("purple", "blue", "cyan"), sphere.size = 3,
         axis.col=c("black","black","black"))

这不会保留图#1中的绿色/红色/橙色点,轴是不可见的,并且点的位置看起来是关闭的,因为图#2看起来一点也不像它。也许我只是用错了spheres3d?

EN

回答 1

Stack Overflow用户

发布于 2019-06-13 06:21:41

以下是基于我的建议的一些代码。我们没有你的真实数据,所以我使用了你给出的数据,以及分组的随机值。

代码语言:javascript
复制
tsne_train <- read.table(textConnection(
"           X1         X2          X3
2   18.940912 -46.761145 -56.1818708
4   17.768953  68.678871   0.8070582
6   -2.440751 -53.021051  55.0437596
7   44.740812  -2.347877 -54.1501468
8  -87.924687  15.354890 -30.1806330
12  21.991465  38.406572 -33.0551010"
), header=TRUE)
trainGroup <- factor(sample(1:3, 6, replace=TRUE))

tsne_test <- read.table(textConnection(
"          X1         X2          X3
1   1.585156  71.568255    7.438958
3  62.204021  -3.817038  -37.609328
5   5.422276 -21.855152   66.865478
9  21.223133 -29.763255 -107.832779
10  9.037427 -62.816717   65.560664
11 24.775047 -51.820532   57.106795"
), header=TRUE)
testGroup <- factor(sample(1:3, 6, replace=TRUE))

scatter3d(x = tsne_train[,1],
          y = tsne_train[,2],
          z = tsne_train[,3],
          groups = trainGroup,
          surface=FALSE, 
          grid = TRUE, 
          ellipsoid = FALSE,
          sphere.size = 1.5,
          surface.col = c("red",  "orange", "green"),
          fogtype = "none",
          axis.col = c("black","black","black"))
spheres3d(x = (tsne_test[,1]-min(tsne_train[,1]))/
              (max(tsne_train[,1]) - min(tsne_train[,1])),
          y = (tsne_test[,2]-min(tsne_train[,2]))/
              (max(tsne_train[,2]) - min(tsne_train[,2])),
          z = (tsne_test[,3]-min(tsne_train[,3]))/
              (max(tsne_train[,3]) - min(tsne_train[,3])),
          col = c("purple", "blue", "cyan")[testGroup], 
          radius = 0.1)

下面是这个图的样子:

如果您坚持使用rgl函数,而不使用scatter3d函数,这一切都会更容易。例如,

代码语言:javascript
复制
plot3d( x = tsne_train,
            col = c("red", "orange", "green")\[trainGroup\], 
            type="s")
spheres3d(x = tsne_test,
          col = c("purple", "blue", "cyan")\[testGroup\], 
          radius = 3)

这将生成以下图:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56564438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档