在 Plotly R 中按组汇总数据

Summarize data by group in Plotly R

我有一个包含两个动物园中动物的数据框。现在这些动物被重复了。当我使用 plotly 绘制它时,它只采用动物的一个值并绘制它。所以即使 SF_ZOO 中有 9 只长颈鹿,它也只是显示 8。如何按动物分组并显示所有值的总和?

library(plotly)

Animals <- c("giraffes", "orangutans", "monkeys","giraffes", "orangutans", "monkeys")
SF_Zoo <- c(1,4,6,8,9,11)
LA_Zoo <- c(11,13,15,12,15,08)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)

p <- plot_ly(data, x = aggregate(~Animals), y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
  add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
  layout(yaxis = list(title = 'Count'), barmode = 'group')

您没有正确使用 aggregate;我会先 aggregate 然后绘制

data.agg <- aggregate(cbind(SF_Zoo, LA_Zoo) ~ Animals, data = data, FUN = sum)

p <- plot_ly(data.agg, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
  add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
  layout(yaxis = list(title = 'Count'), barmode = 'group')

或者您可以采用 tidyverse 方式并使用 ggplotly 进行绘图

library(tidyverse)
p <- data %>%
    gather(Zoo, Value, -Animals) %>%
    group_by(Animals, Zoo) %>%
    summarise(Value = sum(Value)) %>%
    ggplot(aes(x = Animals, y = Value, fill = Zoo)) +
    geom_col(position = "dodge2")
ggplotly(p)