Vấn đề tô màu biểu đồ phân tán 3D bằng cách sử dụng “plot3D”

Dec 05 2020

Tôi đang cố gắng tạo biểu đồ phân tán 3D bằng cách sử dụng plot3Dgói. Thật không may, tôi gặp khó khăn trong việc chỉ định màu cho từng điểm.

Ví dụ: khi tôi cố gắng vẽ 8 điểm trên cốt truyện và tôi muốn gán "đen" cho 4 điểm đầu tiên và "đỏ" tương ứng cho 4 điểm cuối cùng, tôi đã viết kịch bản sau (trong kịch bản này, tôi đã sử dụng 8 mẫu từ tập dữ liệu mẫu irisvà cố gắng để assign Sepal.Length, Petal.Length, Sepal.WidthX, Y, Z trục, tương ứng);

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

Trong trường hợp này, kỳ lạ thay, 6 điểm có màu đen và 2 điểm có màu đỏ, tương ứng. Tôi hoàn toàn không hiểu tại sao điều này lại xảy ra.

Tôi sẽ đánh giá cao rất nhiều nếu bạn vui lòng cho tôi biết cách giải quyết vấn đề này. Cảm ơn bạn rất nhiều trước!

Trả lời

1 Ben Dec 06 2020 at 00:14

Lý do bạn nhìn thấy 6 màu đen và 2 màu đỏ, đó colvarlà bị thiếu trong scatter3Dcuộc gọi của bạn để sử dụng coltrong tô màu.

Trong ví dụ của bạn, màu dựa trên trục z của bạn. Để chứng minh, chúng tôi có thể thêm lại colkey, thêm ticktypeđể xem thông tin trục và xoay một chút để hiển thị màu đỏ được áp dụng cho các giá trị trên 3,45 in sep.w(trục z), chỉ bao gồm 2 giá trị từ dữ liệu của bạn (3,6 và 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"
          )

Bây giờ, nếu bạn muốn chỉ định màu dựa trên chỉ số / số của 8 điểm, bạn có thể thêm colvarvà gán, ví dụ: 4 giá trị đầu tiên là 1 đối với màu đen và 4 giá trị thứ hai là 2 đối với màu đỏ:

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

Bạn có thể xem xét một vectơ khác colvarđể tô màu các điểm của bạn; chỉ cần đảm bảo rằng nó có cùng độ dài với dữ liệu x, y và z của bạn.