ปัญหาในการระบายสี scatterplot 3 มิติโดยใช้ "plot3D"

Dec 05 2020

ฉันกำลังพยายามสร้างพล็อตการกระจาย 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 แต้มเป็นสีแดงตามลำดับ ฉันสูญเสียอย่างสิ้นเชิงว่าทำไมสิ่งนี้จึงเกิดขึ้น

ฉันจะขอบคุณมากถ้าคุณกรุณาแจ้งให้เราทราบวิธีแก้ปัญหานี้ ขอบคุณล่วงหน้า!

คำตอบ

1 Ben Dec 06 2020 at 00:14

เหตุผลที่คุณเห็น 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 ของคุณ