如何使用 R 制作前 3 名的堆叠条形图?

How can I make a top 3 plotly stacked bar graph using R?

我喜欢这个图书馆,但我肯定不是最好的!我正在尝试使用 R Studio 中的 plotly 库绘制一个简单的堆积条形图。

这是我的示例数据:

structure(list(parent = c("Sam", "Elena", "Sam", "Jhon", "Raul", 
"Sam", "Jhon", "Sara", "Paul", "Chris"), cost = c(4, 1, 2, 4, 
1, 2, 4, 3, 5, 6), topic = c("Banana", "Banana", "Berries", "Apple", 
"Watermelon", "Banana", "Berries", "Avocado", "Watermelon", "Pinneaple"
)), row.names = c(NA, -10L), class = "data.frame")

这就是我尝试绘制它的方式:

# Color setting
ramp2 <- colorRamp(c("deepskyblue4", "white"))
ramp.list2 <- rgb( ramp2(seq(0, 1, length = 15)), max = 255)

plot_ly(sample %>%
          top_n(3, `cost`), x = ~parent, y = ~cost, type = 'bar', color = ~topic ) %>%
  layout(yaxis = list(title = 'Cost'), barmode = 'stack') %>%
  add_trace(y = ~topic) %>%
  layout(colorway = ramp.list2) %>%
  config(displayModeBar = FALSE)

但肯定有一些东西是磨损的,因为:

y 轴给我主题和数字,所以我对此非常困惑。

图例在每个主题中出现不止一次。

不只是根据成本总和绘制前 3 名。

显示的颜色与我尝试使用的颜色完全不同。

this link 中的堆积条形图并没有真正让我了解如何按照我想要的方式绘制此图。我只想要 3 个酒吧;一个给 Sam - 39000(除以两种颜色,因为他有 3 个主题,但 2 个是相同的,我希望线条显示分开香蕉颜色,让它看起来因为涉及两个成本),另一个给 Jhon - 30000(除以两种颜色)和保罗的最后一个 - 19000。也希望图例不再重复。

这是我用该代码得到的图:

您可能会出错,因为您尝试添加 add_trace(y = ~topic),而当您指定 barmode = 'stack' 时则不需要。我不太确定你最终想要的情节(top3 与否),但如果你从以下开始,它应该让你继续:

library(plotly)
library(dplyr)

ramp2 <- colorRamp(c("deepskyblue4", "white"))
ramp.list2 <- rgb( ramp2(seq(0, 1, length = 15)), max = 255)
plot_ly(sample ,
x = ~parent, y = ~cost, type = 'bar', color = ~topic ) %>%
  layout(list(title = 'Cost'), barmode = 'stack') %>%
  layout(colorway = ramp.list2) %>%
  config(displayModeBar = FALSE)