Полностью цветная панель с одним наблюдением - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь нарисовать график, где столбцы окрашены на основе третьей «вероятностной» переменной.Я хочу установить цветовую шкалу на 0: 100 и нанести на график различные подмножества данных.Все работает хорошо, пока мое подмножество содержит только одно наблюдение, тогда цвет больше не соответствует цветовой шкале.Может быть, кто-то может указать мне в правильном направлении?Пример:

> data <- data.table(name = c("foo", "bar", "bar", "bar"), value = c(10, 15, 40, 35), probability = c(0.9, 0.4, 0.8, 0.3), id = c("one", "two", "three", "four"))
> 
> data
   name value probability    id
1:  foo    10         0.9   one
2:  bar    15         0.4   two
3:  bar    40         0.8 three
4:  bar    35         0.3  four
> 
> data1 <- data[name == "bar"]
> data2 <- data[name == "foo"]
> 
> p1 <- plot_ly(data1,
+        x = ~value,
+        y = ~id,
+        type = "bar",
+        orientation = "h",
+        marker = list(color = ~(probability * 100), colorbar = list(title = "Probability", cmin = 0, cmax = 100))
+ )
> 
> p2 <- plot_ly(data2,
+         x = ~value,
+         y = ~id,
+         type = "bar",
+         orientation = "h",
+         marker = list(color = ~(probability * 100), colorbar = list(title = "Probability", cmin = 0, cmax = 100))
+ )
> 
> plotly::subplot(p1, p2)

Вот результирующий график:

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Здравствуйте, полный незнакомец,

Я думаю, что на самом деле есть ошибка с Rplotly, как предположил vlizana.Если у вас есть только одна строка легенды не работает, как предполагалось.Поэтому, если вы добавите новую строку в этих случаях, она будет работать.И если в строке вместо значений будет NA, вы получите предупреждение, но оно не появится на графике.

Код для достижения этой цели следующий:

data <- data.table(name = c("foo", "bar", "bar", "bar"), value = c(10, 15, 40, 35), probability = c(0.9, 0.4, 0.8, 0.3), id = c("one", "two", "three", "four"))

data1 <- data[name == "bar"]
data2 <- data[name == "foo"]
if(nrow(data2)== 1){
  add_data2 <- data2[2L] 
  add_data2[,1] <- "Delete"
  data2 <- rbind(data2, add_data2)
}

p1 <- plot_ly(data1,
              x = ~value,
              y = ~id,
              type = "bar",
              orientation = "h",
              marker = list(color = ~probability * 100 , colorbar = list(title = "Probability", cmin = 0, cmax = 100, cauto = F))
)
p2 <- plot_ly(data2,
              x = ~value,
              y = ~id,
              type = "bar",
              orientation = "h",
              marker = list(color = ~probability * 100, colorbar = list(title = "Probability", cmin = 0, cmax = 100, cauto = F))
)
plotly::subplot(p1, p2)
0 голосов
/ 24 июня 2019

Я думаю, cmin и cmax являются свойствами Marker, а не Colorbar, поэтому меняются

marker = list(
    color = ~(probability * 100),
    colorbar = list(title = "Probability", cmin = 0, cmax = 100)
)

до

marker = list(
    color = ~(probability * 100),
    colorbar = list(title = "Probability"),
    cmin = 0,
    cmax = 100
)

должно работать.

...