如何在多条件下在R中绘制3D

时间:2019-02-11 12:31:27

标签: r

我的数据集具有以下3种功能:

V1       V2      V3
0.268   0.917   0.191
0.975   0.467   0.447
0.345   0.898   0.984
0.901   0.043   0.456
0.243   0.453   0.964
0.001   0.464   0.953
0.998   0.976   0.978
0.954   0.932   0.923

如何根据以下条件在3D图形中绘制此数据,并为每种条件提供不同的颜色。

(v1>=0.90 && v3>=0.90  && v3>=0.90) || (v1>=0.90 && v3< 0.50  && v3< 0.50) || (v1 < 0.50 && v3>=0.90  && v3< 0.50)|| (v1< 0.50 && v3< 0.50  && v3>=0.90)

2 个答案:

答案 0 :(得分:1)

我假设每种情况下的第二条语句都引用了V2,这更有意义。要根据首先满足的条件为点着色,您需要创建一个具有该值的列:

df = data.frame(
  "V1" = c(0.268,0.975,0.345,0.901,0.243,0.001,0.998,0.954),
  "V2" = c(0.917,0.467,0.898,0.043,0.453,0.464,0.976,0.932),
  "V3" = c(0.191,0.447,0.984,0.456,0.964,0.953,0.978,0.923)
)


df = df %>% 
  mutate(
    group = case_when(
      V1 >= 0.9 & V2 >= 0.9 & V3 >=0.9 ~ "1",
      V1 >= 0.9 & V2 < 0.5 & V3 < 0.5 ~ "2",
      V1 < 0.5 & V2 >= 0.9 & V3 <0.5 ~ "3",
      V1 <0.5 & V2 <0.5 & V3 >=0.9 ~ "4",
      T ~ "5"
))

然后,我们可以使用plotlyscatterplot3d包来构建图形:

scatterplot3d(x=df$V1,y=df$V2,z=df$V3,color=df$group)
plot_ly(x=df$V1,y=df$V2,z=df$V3,color = df$group)

enter image description here enter image description here

答案 1 :(得分:0)

您可以首先使用矢量化的&;|

创建一个逻辑矢量
# Create the logical vector
ind <- (mat$v1>=0.90 & mat$v3>=0.90  & mat$v3>=0.90) | (mat$v1>=0.90 & mat$v3< 0.50  & mat$v3< 0.50) | 
    (mat$v1 < 0.50 & mat$v3>=0.90  & mat$v3< 0.50) | (mat$v1< 0.50 & mat$v3< 0.50  & mat$v3>=0.90)

现在可以绘制它,例如使用plotly

# plot
plotly::plot_ly(x = mat$v1[ind], y = mat$v2[ind], z = mat$v3[ind])

RPlot

有数据

mat = structure(list(v1 = c(0.268, 0.975, 0.345, 0.901, 0.243, 0.001, 
  0.998, 0.954), v2 = c(0.917, 0.467, 0.898, 0.043, 0.453, 0.464, 
  0.976, 0.932), v3 = c(0.191, 0.447, 0.984, 0.456, 0.964, 0.953, 
  0.978, 0.923)), class = "data.frame", row.names = c(NA, -8L))