Problem beim Färben von 3D-Streudiagrammen mit „plot3D“

Dec 05 2020

Ich versuche mit dem plot3DPaket ein 3D-Streudiagramm zu erstellen . Leider habe ich Probleme, jedem Punkt Farbe zuzuweisen.

Wenn ich zum Beispiel versuche, 8 Punkte auf dem Plot zu zeichnen und den ersten 4 Punkten "schwarz" und den letzten 4 Punkten "rot" zuweisen möchte, habe ich das folgende Skript geschrieben (in diesem Skript habe ich 8 Beispiele verwendet aus dem Beispieldatensatz irisund versuchte zuzuweisen Sepal.Length, Petal.Length, Sepal.WidthX, Y, Z - Achse, jeweils);

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)))

In diesem Fall waren seltsamerweise 6 Punkte schwarz und 2 Punkte rot gefärbt. Ich bin völlig ratlos, warum dies passiert.

Ich würde mich sehr freuen, wenn Sie mir freundlicherweise mitteilen würden, wie dieses Problem zu lösen ist. Vielen Dank im Voraus!

Antworten

1 Ben Dec 06 2020 at 00:14

Der Grund, warum Sie 6 schwarze und 2 rote sehen, ist, dass colvarin Ihrem scatter3DAnruf etwas fehlt, das zum colFärben verwendet werden soll.

In Ihrem Beispiel basiert die Farbe auf Ihrer Z-Achse. Zur Demonstration können wir die Achseninformationen wieder hinzufügen colkey, hinzufügen ticktype, um sie anzuzeigen, und ein wenig drehen, um anzuzeigen, dass die rote Farbe für Werte über 3,45 Zoll sep.w(Z-Achse) angewendet wird , die nur 2 Werte aus Ihren Daten enthält (3,6 und 3,9). .

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"
          )

Wenn Sie nun Farben basierend auf dem Index / der Anzahl der 8 Punkte zuweisen möchten, können Sie colvarbeispielsweise die ersten 4 Werte als 1 für Schwarz und die zweiten 4 Werte als 2 für Rot hinzufügen und zuweisen:

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)))

Sie können einen anderen Vektor in Betracht ziehen colvar, der zum Färben Ihrer Punkte sinnvoll ist. Stellen Sie nur sicher, dass es dieselbe Länge wie Ihre x-, y- und z-Daten hat.