【问题标题】:Stacked bar chart with floating bars带有浮动条的堆积条形图
【发布时间】:2020-08-13 13:01:49
【问题描述】:

我有一个数据框,我想用 ggplotly 将其显示在分组堆叠的条形图中。

library(ggplotly)
library(dplyr)
library(tidyr)


year = rep(c(2019,2019,2020,2020), 2)
month = rep(c("June","July"), 4)
gender = c("M","M","M","M","F","F","F","F")
male = c(11,13,15,17)
female = c(12,14,16,18)
count = c(11,13,15,17,12,14,16,18)

df <- data.frame(year, month, gender, count = as.numeric(count))

p <- df %>%
  mutate(count=as.numeric(count),
         month=factor(month, levels=c("June","July")),
         Month=paste(year,month,sep="-")) %>%
  ggplot(aes(month, count, fill=gender)) +
  geom_bar(stat="identity", position=position_stack()) +
  theme_minimal() + xlab("") + 
  facet_grid(~year, switch='x') + 
  theme(axis.text.x = element_text(margin = margin(t = -1, unit = "cm")))

ggplotly(p)

这很好用,但是当我在图例中取消选择“M”时,“F”条保持浮动在其原始位置并且不会向下移动到 x 轴。我做错了什么?

【问题讨论】:

标签: r r-plotly ggplotly


【解决方案1】:

尝试在您的数据中应用 dcast 并在情节中使用。

dt <- data.table(df) ## converts it to data.table
dt <- dcast.data.table(dt, year + month ~ gender, value.var = 'count') # dcast

fig <- plot_ly(dt, x = ~month, y = ~F, type = 'bar', name = 'F')
fig <- fig %>% add_trace(y = ~M, name = 'M')
fig <- fig %>% layout(yaxis = list(title = 'Count'), barmode = 'stack')

fig

【讨论】:

  • 您的代码不会产生相同类型的分组和堆叠条形图。