R Plotly: изменить символ легенды - PullRequest
0 голосов
/ 28 августа 2018

Как мне изменить символы легенды по умолчанию в R сюжетно? В моем примере ниже я бы хотел, чтобы оба символа были точками в легенде. Запись легенды для "A" должна быть синим кругом. (По умолчанию Plotly использует символ первой точки для каждой категории.)

enter image description here

library(plotly)

# generate example data
name  = rep("A", 100)
name[1:100%%6 == 0] = "B"
data = data.frame(x = 1:100, y = sin(1:100),
                  name = name,
                  symbol = c(2, rep(1, 50), 2, 2,2, 2, 2, 2, rep(1, 43)))



plot_ly(data)%>%
          add_markers(x = ~x, y = ~y, symbol = ~symbol,
                      symbols = c(27, 4),
                      mode = 'markers', split = ~name)

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ах, plotly выбрал первую запись столбца symbol для использования в своей легенде.

> head(data[data$name == 'A', ])
  x          y name symbol
1 1  0.8414710    A      2  # The first value is 2
2 2  0.9092974    A      1
3 3  0.1411200    A      1
4 4 -0.7568025    A      1
5 5 -0.9589243    A      1
7 7  0.6569866    A      1

Принимая во внимание, что в случае 'B' -

> head(data[data$name == 'B', ])
    x          y name symbol
6   6 -0.2794155    B      1  # The first value is 1
12 12 -0.5365729    B      1
18 18 -0.7509872    B      1
24 24 -0.9055784    B      1
30 30 -0.9880316    B      1
36 36 -0.9917789    B      1

Если вы сортируете свои данные по name и symbol, легенда должна быть согласованной.

library(plotly)

# generate example data
name  = rep("A", 100)
name[1:100%%6 == 0] = "B"
data = data.frame(x = 1:100, y = sin(1:100),
                  name = name,
                  symbol = c(2, rep(1, 50), 2, 2,2, 2, 2, 2, rep(1, 43)))

data <- data[with(data, order(symbol, name)), ]

plot_ly(data)%>%
  add_markers(x = ~x, y = ~y, symbol = ~symbol, symbols = c(27, 4), 
              mode = 'markers', split = ~name)

enter image description here

0 голосов
/ 28 августа 2018

Путем сопоставления аргумента символа и цвета с факторной переменной вы можете создать одну трассировку для каждого символа и имени. Следующий код может решить вашу проблему:

col3 <- colorRamp(c("red", "blue"))
p = plot_ly(data,x = ~x, y = ~y)
add_markers(p, symbol = ~factor(symbol), 
            color = ~factor(name), 
            colors = col3, symbols = c(27,4))

Проверьте эту ссылку для более подробной информации о трассировке рассеянного графика. https://plotly -book.cpsievert.me / Разброс-traces.html

...