「plot3D」を使用した3D散布図の色付けの問題

Dec 05 2020

plot3Dパッケージを使用して3D散布図を作成しようとしています。残念ながら、各ポイントに色を割り当てるのに問題があります。

たとえば、プロットに8ポイントを描画しようとして、最初の4ポイントに「黒」を割り当て、最後の4ポイントに「赤」を割り当てたい場合、次のスクリプトを作成しました(このスクリプトでは、8つのサンプルを使用しました)サンプルデータセットからirisと割り当てることを試みSepal.LengthPetal.LengthSepal.WidthそれぞれX、Y、Z軸方向に)。

data(iris)
sep.l <- iris[1:8,]$Sepal.Length pet.l <- iris[1:8,]$Petal.Length
sep.w <- iris[1:8,]$Sepal.Width


library(plot3D)
scatter3D(x=sep.l, y=pet.l, z=sep.w,
pch =19,
bty = "b2",
colkey= FALSE,
col=c(rep("black", 4), rep("red", 4)))

この場合、不思議なことに、それぞれ6点が黒、2点が赤になりました。なぜこれが起こるのか私は完全に途方に暮れています。

この問題の解決方法を教えていただければ幸いです。事前にどうもありがとうございました!

回答

1 Ben Dec 06 2020 at 00:14

6つの黒と2つの赤が表示される理由colvarは、カラーリングscatter3Dで使用するための呼び出しから欠落しているためcolです。

あなたの例では、色はあなたのz軸に基づいています。実例を示すために、を追加し直しcolkey、追加ticktypeして軸情報を表示し、少し回転sep.wして、データの2つの値(3.6と3.9)のみを含む3.45インチ(z軸)を超える値に赤色が適用されることを示します。 。

data(iris)

sep.l <- iris[1:8,]$Sepal.Length pet.l <- iris[1:8,]$Petal.Length
sep.w <- iris[1:8,]$Sepal.Width

library(plot3D)

scatter3D(x = sep.l, y = pet.l, z = sep.w,
          pch = 19,
          bty = "b2",
          colkey = TRUE,
          phi = 15,
          theta = 30,
          col=c(rep("black", 4), rep("red", 4)),
          ticktype = "detailed"
          )

ここで、8ポイントのインデックス/番号に基づいて色を割り当てたい場合colvarは、たとえば、最初の4つの値を黒の場合は1として、次の4つの値を赤の場合は2として追加して割り当てることができます。

scatter3D(x = sep.l, y = pet.l, z = sep.w,
          pch = 19,
          bty = "b2",
          colkey = FALSE,
          phi = 15,
          theta = 30,
          col=c(rep("black", 4), rep("red", 4)),
          ticktype = "detailed",
          colvar = c(rep(1, 4), rep(2, 4)))

colvarポイントに色を付けるのに意味のある別のベクトルを検討できます。x、y、zデータと同じ長さであることを確認してください。