【问题标题】:Color in plotly bar chart绘图条形图中的颜色
【发布时间】:2016-04-11 03:24:55
【问题描述】:

我正在尝试在 R 中使用 plotly 生成条形图。条形图应按值排序,并且有两类条形图,我想对它们进行不同的着色。但是,当我添加颜色时,条形图分为两组,按组排序。关于如何将它们保持在一个组中的任何提示?

这是我的代码:

plotting.df = data.frame(names=c("a", "b", "c", "d", "e", "f", "g"),
                         value=c(1.9468656, 1.3867055, 1.0433950, 0.8949743, 0.3714826, 0.3605037, 0.3003954),
                         label=c("y", "n", "y", "n", "n", "n", "n"),
                         color=c("red", "black", "red", "black", "black", "black", "black"))
plotting.df$names = factor(as.character(plotting.df$names), levels=as.character(plotting.df$names)[order(plotting.df$value, decreasing=TRUE)])
plotting.df = plotting.df[order(plotting.df$value, decreasing=TRUE), ]
plot_ly(plotting.df, type="bar", x=names, y=value, 
        name="Comp a", 
        hoverinfo="text", text=c(paste("Name:", plotting.df$names, 
                                       "<br>Value:", signif(plotting.df$value, digits=3),
                                       "<br>Label:", plotting.df$label)),
        color=color)

还有一个例子:

【问题讨论】:

  • 有趣的问题,但由于您使用的是 runif(),因此您应该设置种子,因为我们将无法重现您的情节
  • 好点。我用实际值替换了runif。在这种情况下,确切的值并不重要。

标签: r bar-chart plotly


【解决方案1】:

这有点小技巧,但这“解决”了所提出的具体问题。

从您的数据框开始:

    library(tidyr)

    plotting.df2 <- plotting.df %>%
      spread(names, value, fill = NA) %>%
      gather("names", "value", a:g)

    plot_ly(plotting.df2, 
        type="bar", 
        x=names, 
        y=value, 
        name="Comp a", 
        hoverinfo="text", 
        color=color,
        text=c(paste("Name:", plotting.df$names, 
                     "<br>Value:", signif(plotting.df$value, digits=3),
                     "<br>Label:", plotting.df$label))) %>%
    layout(barmode = "stack")

基本上,此方法为名称和颜色的每个组合创建一个数据点,并用 NA 填充。然后将这些堆叠在情节中。

如果您以后想实际堆叠数据值,这种“解决方案”可能没用,但希望这种技巧至少可以暂时让某人摆脱类似的困境。

编辑: 此示例使用plotly 3.x.x。如果您使用plotly 4.x.x 或更高版本,此代码可能无法按原样运行。更多详情请看这里:https://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/

【讨论】:

  • 感谢您的解决方案。没有` %>% layout(barmode = "stack")`,它实际上看起来是一样的。但我暂时不需要堆叠任何其他数据
猜你喜欢
  • 2020-04-11
  • 2019-03-23
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
相关资源
最近更新 更多