【发布时间】:2019-06-25 23:32:43
【问题描述】:
我有以下数据:
df <- data.frame(numbers = rep(1:3, 30),
letter = sample(c("A", "B", "C", "D"), 90, replace = TRUE),
status = sample(c("good", "bad", "ugly"), 90, replace = TRUE))
我正在尝试复制这个 ggplot2 图,但让它具有交互性:
ggplot(df, aes(letter, fill = status)) + geom_bar() + facet_wrap(.~numbers)
如果我使用ggplotly,那么我可以选择和取消选择变量,但条形不会重新调整,所以我得到如下所示的内容:
所以我的想法是转换数据,然后创建单独的情节图并使用子图:
df_group <- df %>% group_by(numbers, letter, status) %>% tally()
df_group_cast <- dcast(df_group, numbers + letter ~ status)
p1 <- df_group_cast %>%
filter(numbers == 1) %>%
plot_ly(x = ~letter, y = ~good, type = 'bar', name = 'good') %>%
add_trace(y = ~bad, name = 'bad') %>%
add_trace(y = ~ugly, name = 'ugly') %>%
layout(yaxis = list(title = 'Count'), barmode = 'stack')
p2 <- df_group_cast %>%
filter(numbers == 2) %>%
plot_ly(x = ~letter, y = ~good, type = 'bar', name = 'good') %>%
add_trace(y = ~bad, name = 'bad') %>%
add_trace(y = ~ugly, name = 'ugly') %>%
layout(yaxis = list(title = 'Count'), barmode = 'stack')
p3 <- df_group_cast %>%
filter(numbers == 3) %>%
plot_ly(x = ~letter, y = ~good, type = 'bar', name = 'good') %>%
add_trace(y = ~bad, name = 'bad') %>%
add_trace(y = ~ugly, name = 'ugly') %>%
layout(yaxis = list(title = 'Count'), barmode = 'stack')
subplot(p1, p2, p3)
这是交互式的,但看起来也很糟糕。我希望他们共享一个比例,有一个图例,并为每个数字组指定标题。
这可能吗?
(我正在尝试将这样的交互式图表嵌入到 slidify 中,如果有更好的库我愿意使用它们。到目前为止 rCharts 让我失望了,所以我正在尝试)
【问题讨论】:
标签: r ggplot2 plotly facet slidify