Problem beim Färben von 3D-Streudiagrammen mit „plot3D“
Ich versuche mit dem plot3D
Paket 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 iris
und versuchte zuzuweisen Sepal.Length
, Petal.Length
, Sepal.Width
X, 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
Der Grund, warum Sie 6 schwarze und 2 rote sehen, ist, dass colvar
in Ihrem scatter3D
Anruf etwas fehlt, das zum col
Fä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 colvar
beispielsweise 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.