首页 > 解决方案 > 如何使用 Plotly 的条形图防止具有相同 x 值的条形相互重叠

问题描述

考虑以下数据并绘制

library(plotly)

# data
products <- data.frame(
  ProductId = c(1, 2, 3, 4, 5),
  DaysTilExpiration = c(3, 3, 7, 7, 7),
  RemainingInventory = c(100, 50, 25, 30, 41)
)
products
  ProductId DaysTilExpiration RemainingInventory
1         1                 3                100
2         2                 3                 50
3         3                 7                 25
4         4                 7                 30
5         5                 7                 41

# plot
plot_ly(data = products, x = ~DaysTilExpiration, y = ~RemainingInventory, type = 'bar')

在此处输入图像描述

如您所见,有些产品没有出现在绘图上,因为它们与其他产品具有相同的 x 值。理想情况下,如果产品 1 和 2 具有相同的 x 值,我想将它们的条形显示为彼此相邻。使用plotly可以做到这一点吗?(我知道存在分组条形图的概念,但我认为这不是该数据的正确解决方案。

更新:
事实证明我可以使用ggplot2来构建它

library(ggplot2)
ggplot(products, aes(x = DaysTilExpiration, y = RemainingInventory))+
  geom_bar(stat = "identity", position = position_dodge2())

从技术上讲,我可以plotly::ggplotly()用来构建我的情节,但很高兴看到对此有一个本地情节解决方案(如果存在的话)。

在此处输入图像描述

标签: rplotly

解决方案


一种方法是添加一个用于命名条的附加参数,例如name = ~ProductId.

plot_ly(data = products, 
        x = ~DaysTilExpiration, 
        y = ~RemainingInventory, 
        name = ~ProductId, 
        type = 'bar')

在此处输入图像描述


推荐阅读