ปัญหาในการระบายสี scatterplot 3 มิติโดยใช้ "plot3D"
ฉันกำลังพยายามสร้างพล็อตการกระจาย 3 มิติโดยใช้plot3Dแพ็คเกจ ขออภัยฉันมีปัญหาในการกำหนดสีให้กับแต่ละจุด
ตัวอย่างเช่นเมื่อฉันพยายามวาด 8 จุดบนพล็อตและฉันต้องการกำหนด "สีดำ" ให้กับ 4 จุดแรกและ "สีแดง" เป็น 4 จุดสุดท้ายตามลำดับฉันได้เขียนสคริปต์ต่อไปนี้ (ในสคริปต์นี้ฉันใช้ตัวอย่าง 8 ตัวอย่าง จากชุดข้อมูลตัวอย่างirisและพยายามที่จะกำหนดSepal.Length, Petal.Length, Sepal.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 แต้มเป็นสีแดงตามลำดับ ฉันสูญเสียอย่างสิ้นเชิงว่าทำไมสิ่งนี้จึงเกิดขึ้น
ฉันจะขอบคุณมากถ้าคุณกรุณาแจ้งให้เราทราบวิธีแก้ปัญหานี้ ขอบคุณล่วงหน้า!
คำตอบ
เหตุผลที่คุณเห็น 6 สีดำและ 2 สีแดงนั่นcolvarคือสิ่งที่ขาดหายไปจากการscatter3Dโทรของคุณที่จะใช้colในการระบายสี
ในตัวอย่างของคุณสีจะขึ้นอยู่กับแกน z ของคุณ เพื่อแสดงให้เห็นเราสามารถเพิ่มกลับcolkeyเพิ่มticktypeเพื่อดูข้อมูลแกนและหมุนบิตเพื่อแสดงให้เห็นว่าสีแดงถูกนำไปใช้กับค่าที่มากกว่า 3.45 นิ้วsep.w(แกน z) ซึ่งมีเพียง 2 ค่าจากข้อมูลของคุณ (3.6 และ 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"
)
ตอนนี้หากคุณต้องการกำหนดสีตามดัชนี / จำนวน 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 ของคุณ