颜色在3D散点图(R)上无法正确显示

时间:2020-03-12 18:11:43

标签: r r-plotly

我正在尝试绘制一些图(下面的代码),并使两个图之间的颜色保持一致。一个图形包含8个数据点,另一个图形包含5个数据点。尽管每个图使用几乎相同的代码,但颜色却不匹配。是否有人对为什么两个图形之间的颜色不匹配有任何见识?

正确的颜色(https://plot.ly/~MKT533/3/#/):

p <-
  plot_ly(
    mkt533,
    x = ~ onsitetrainers_x,
    y = ~ lowprice_y,
    z = ~ flexibleclasses_z,
    color = ~ name,
    colors = c(
      "#AB1100",
      "#00274C",
      "#00B5AF",
      "#00274C",
      "#00274C",
      "#72088E",
      "#E9B000",
      "#0050AC"
    )
  ) %>%
  add_markers() %>%
  layout(scene = list(
    xaxis = list(title =  "Professional guidance",
                 range = c(1, 10)),
    yaxis = list(title =
                   "Value for money", range = c(1, 10)),
    zaxis = list(title =
                   "Time flexibility", range = c(1, 10))
  ))

颜色错误(https://plot.ly/~MKT533/1/#/):

mkt533_product <- subset(mkt533, type!="Segment")

product <-
  plot_ly(
    mkt533_product,
    x = ~ onsitetrainers_x,
    y = ~ lowprice_y,
    z = ~ flexibleclasses_z,
    color = ~ name,
    colors = c("#AB1100", "#00B5AF", "#72088E", "#E9B000", "#0050AC")
  ) %>%
  add_markers() %>%
  layout(scene = list(
    xaxis = list(title = "Professional guidance", range = c(1, 10)),
    yaxis = list(title = "Value for money", range =
                   c(1, 10)),
    zaxis = list(title = "Time flexibility", range =
                   c(1, 10))
  ))

以下是我用于这些绘图的数据:

mkt533 <-
  structure(
    list(
      onsitetrainers_x = c(1L, 3L, 10L, 9L, 2L, 1L,
                           7L, 10L),
      lowprice_y = c(10L, 3L, 3L, 2L, 7L, 7L, 3L, 1L),
      flexibleclasses_z = c(4L,
                            8L, 3L, 5L, 7L, 1L, 6L, 6L),
      name = structure(
        c(4L, 2L, 5L, 3L,
          7L, 1L, 8L, 6L),
        .Label = c(
          "At-home gym",
          "Busy young families",
          "CrossFit",
          "Fitness-conscious youth",
          "Need that extra push",
          "Taekwondo gym",
          "YMCA",
          "Yoga studio"
        ),
        class = "factor"
      ),
      type = structure(
        c(3L,
          3L, 3L, 2L, 5L, 1L, 6L, 4L),
        .Label = c(
          "At-home gym",
          "CrossFit",
          "Segment",
          "Taekwondo gym",
          "YMCA",
          "Yoga studio"
        ),
        class = "factor"
      ),
      size = c(0.55, 0.3, 0.15, 0.25, 0.25, 0.25, 0.25, 0.25)
    ),
    class = "data.frame",
    row.names = c(NA,-8L)
  )

还有mkt533_product

structure(
    list(
      onsitetrainers_x = c(9L, 2L, 1L, 7L, 10L),
      lowprice_y = c(2L,
                     7L, 7L, 3L, 1L),
      flexibleclasses_z = c(5L, 7L, 1L, 6L, 6L),
      name = structure(
        c(3L,
          7L, 1L, 8L, 6L),
        .Label = c(
          "At-home gym",
          "Busy young families",
          "CrossFit",
          "Fitness-conscious youth",
          "Need that extra push",
          "Taekwondo gym",
          "YMCA",
          "Yoga studio"
        ),
        class = "factor"
      ),
      type = structure(
        c(2L,
          5L, 1L, 6L, 4L),
        .Label = c(
          "At-home gym",
          "CrossFit",
          "Segment",
          "Taekwondo gym",
          "YMCA",
          "Yoga studio"
        ),
        class = "factor"
      ),
      size = c(0.25,
               0.25, 0.25, 0.25, 0.25)
    ),
    row.names = 4:8,
    class = "data.frame"
  )

1 个答案:

答案 0 :(得分:0)

颜色不同,因为您为每个图提供了不同的颜色。更具体地说,因为mkt533_productsubset的{​​{1}},所以即使未保留该变量的所有内容,它也保留了每个变量的组织。所以

mkt533

mkt533$name
[1] Fitness-conscious youth Busy young families     Need that extra push    CrossFit               
[5] YMCA                    At-home gym             Yoga studio             Taekwondo gym          
8 Levels: At-home gym Busy young families CrossFit Fitness-conscious youth Need that extra push Taekwondo gym ... Yoga studio

具有不同的内容,但相同的8个级别。如果为每个图提供相同的颜色,则将在每个图中将相同的颜色映射到相同的级别

mkt533_product$name
[1] CrossFit      YMCA          At-home gym   Yoga studio   Taekwondo gym
8 Levels: At-home gym Busy young families CrossFit Fitness-conscious youth Need that extra push Taekwondo gym ... Yoga studio

enter image description here

  p <-
  plot_ly(
    mkt533,
    x = ~ onsitetrainers_x,
    y = ~ lowprice_y,
    z = ~ flexibleclasses_z,
    color = ~ name,
    colors = c(
      "#AB1100",
      "#00274C",
      "#00B5AF",
      "#00274C",
      "#00274C",
      "#72088E",
      "#E9B000",
      "#0050AC"
    )
  ) %>%
  add_markers() %>%
  layout(scene = list(
    xaxis = list(title = "Professional guidance", range = c(1, 10)),
    yaxis = list(title = "Value for money", range =
                   c(1, 10)),
    zaxis = list(title = "Time flexibility", range =
                   c(1, 10))
  ))

enter image description here