【问题标题】:Plotly colorbar with single observation用单一观察绘制颜色条
【发布时间】:2019-11-06 06:53:20
【问题描述】:

我正在尝试绘制一个条形图,其中条形基于第三个“概率”变量进行着色。我想将颜色条设置为固定为 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)

这是结果图:

【问题讨论】:

    标签: r bar-chart plotly colorbar


    【解决方案1】:

    你好,完全陌生,

    我认为正如 vlizana 所建议的那样,Rplotly 实际上存在一个错误。 如果您只有一排图例,则无法按预期工作。因此,如果您在这些情况下添加新行,它将起作用。如果该行有 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)
    

    【讨论】:

      【解决方案2】:

      我认为cmincmaxMarker 而不是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
      )
      

      应该可以。

      【讨论】:

      • 这可能是 Rplotly 的一个错误,它至少在 python 版本中工作,并且它们使用相同的引擎。
      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 2019-03-19
      • 2019-03-23
      • 2015-11-07
      • 1970-01-01
      • 2018-11-16
      • 2021-12-21
      相关资源
      最近更新 更多