Неправильно отображаются цвета на трехмерной диаграмме рассеяния (R) - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь составить пару графиков (см. Код ниже) и обеспечить согласованность цветов между двумя графиками. Один график содержит 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 голосов
/ 12 марта 2020

Цвета разные, потому что вы указали разные цвета для каждого графика. Более конкретно, поскольку mkt533_product является subset из 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

и

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

имеют разный контент, но одинаковые 8 уровней. Если вы предоставляете каждому графику одинаковые цвета, один и тот же цвет будет отображаться на одном уровне на каждом графике, что вам и нужно

  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

product <-
  plot_ly(
    mkt533_product,
    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

...