Как создать взвешенную диаграмму рассеяния / пузырьковую диаграмму с градиентом цвета, используя график R - PullRequest
2 голосов
/ 05 июня 2019

Я пытаюсь создать взвешенную диаграмму рассеяния / пузырьков, используя график.Мой набор данных содержит 4 столбца:

1) Тест 2) Модель 3) Улучшение 4) Вес

Я пытаюсь, чтобы ось X была эталоном, а ось Y моделью.,Размер точек - это вес, а цвет - градиент, основанный на значении улучшения.Я могу заставить все это работать, кроме градиента.

См. Код ниже:

BenchmarkQuant <- c("A","A","A","B","B","B","C","C","C")
ModelQuant     <- c("X","Y","Z","X","Y","Z","X","Y","Z")
ModelImprovement <- c(runif(9))
SumExposure <-    c(runif(9))*100

data <- as.data.frame(cbind(BenchmarkQuant,ModelQuant,ModelImprovement,SumExposure))
data$SumExposure <- as.numeric(data$SumExposure)

p <- plot_ly(data,
             x = ~BenchmarkQuant,
             y = ~ModelQuant,
             type = 'scatter',
             mode = 'markers',  
             size = ~SumExposure,  
             color = (ModelImprovement), #These are the 2 lines causing issues
             colors = 'Reds',            #These are the 2 lines causing issues
             #Choosing the range of the bubbles' sizes:
             sizes = c(20, 75), 
             marker = list(opacity = 0.5, sizemode = 'diameter')) %>%
  layout(title = 'Model Comparison',
         xaxis = list(showgrid = FALSE),
         yaxis = list(showgrid = FALSE),
         showlegend = TRUE)

p

Я получаю следующее сообщение об ошибке:

Error in Summary.factor(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), na.rm = TRUE) : 
  ‘range’ not meaningful for factors
In addition: Warning message:
`line.width` does not currently support multiple values. 

При запуске вышекод, но если я не включаю 2 строки о цвете, он работает, за исключением без градиента.

1 Ответ

2 голосов
/ 05 июня 2019

Вы были очень близки.Сделал некоторые корректировки после вашего ответа.Надеюсь, это то, что вы ищете.

p <- plot_ly(data,
             x = ~BenchmarkQuant,
             y = ~ModelQuant,
             type = 'scatter',
             mode = 'markers',  
             size = ~SumExposure, 
             colors = 'Reds',
             hoverinfo = 'x+y+text', text = ~paste("Improvement: ", ModelImprovement, "<br>"),

             #Choosing the range of the bubbles' sizes:
             sizes = c(20, 75), 
             marker = list(opacity = 0.5, sizemode = 'diameter',
                           color = ~ModelImprovement,
                           line = list(
                             color = ~ModelImprovement,
                             width = 1),
                           colorbar=list(title='Colorbar'))) %>%
  layout(title = 'Model Comparison',
         xaxis = list(showgrid = FALSE),
         yaxis = list(showgrid = FALSE),
         showlegend = FALSE)

p
...