使用R Plotly组合分组条形图和堆叠条形图

时间:2020-10-01 11:23:25

标签: r plotly r-plotly

我正在尝试使用plot_ly()组合堆积条形图和分组条形图。我遇到了一些问题,但无法为这种情况找到理想的解决方案。

我使用ggplot2碰到了solution。但是我需要使用plot_ly

来实现

这是我要绘制的数据框

structure(list(QuarterYear = c("Q4 2019", "Q4 2019", "Q4 2019", 
"Q4 2019", "Q4 2019", "Q4 2019", "Q4 2019", "Q4 2019", "Q4 2019", 
"Q4 2019", "Q4 2019", "Q4 2019", "Q1 2020", "Q1 2020", "Q1 2020", 
"Q1 2020", "Q1 2020", "Q1 2020", "Q1 2020", "Q1 2020", "Q1 2020", 
"Q1 2020", "Q1 2020", "Q1 2020", "Q2 2020", "Q2 2020", "Q2 2020", 
"Q2 2020", "Q2 2020", "Q2 2020", "Q2 2020", "Q2 2020", "Q2 2020", 
"Q2 2020", "Q2 2020", "Q2 2020", "Q3 2020", "Q3 2020", "Q3 2020", 
"Q3 2020", "Q3 2020", "Q3 2020", "Q3 2020", "Q3 2020", "Q3 2020", 
"Q3 2020", "Q3 2020", "Q3 2020"), Grade = c("Grade 8", "Grade 8", 
"Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
"Grade 10", "Grade 11", "Grade 11", "Grade 11", "Grade 8", "Grade 8", 
"Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
"Grade 10", "Grade 11", "Grade 11", "Grade 11", "Grade 8", "Grade 8", 
"Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
"Grade 10", "Grade 11", "Grade 11", "Grade 11", "Grade 8", "Grade 8", 
"Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
"Grade 10", "Grade 11", "Grade 11", "Grade 11"), Type = c("overallAverage", 
"CT", "RT", "overallAverage", "CT", "RT", "overallAverage", "CT", 
"RT", "overallAverage", "CT", "RT", "overallAverage", "CT", "RT", 
"overallAverage", "CT", "RT", "overallAverage", "CT", "RT", "overallAverage", 
"CT", "RT", "overallAverage", "CT", "RT", "overallAverage", "CT", 
"RT", "overallAverage", "CT", "RT", "overallAverage", "CT", "RT", 
"overallAverage", "CT", "RT", "overallAverage", "CT", "RT", "overallAverage", 
"CT", "RT", "overallAverage", "CT", "RT"), value = c(2.48, 2.21, 
0.27, 3.48, 3.03, 0.45, 4.6, 4, 0.6, 2.8, 2.4, 0.4, 2.54, 2.28, 
0.26, 3.45, 3, 0.45, 4.46, 3.88, 0.58, 3.56, 2.81, 0.75, 2.47, 
2.14, 0.33, 2.96, 2.54, 0.41, 4.1, 3.69, 0.41, 3.44, 2.61, 0.83, 
2, 1.81, 0.19, 2.54, 2.26, 0.28, 4.11, 3.68, 0.43, 2.67, 2.11, 
0.56)), row.names = c(NA, -48L), class = "data.frame")

我知道我们需要将barmode定义为堆积条形图的stack,并将group定义为分组条形图。我现在还不知道使用barmode

将这些plot_ly组合成一个图

任何人都可以在R中提供合适的解决方案吗?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

这是plot_ly可以做的最好的事情:

library(plotly)
library(tidyverse)

dat <- tibble(QuarterYear = c("Q4 2019", "Q4 2019", "Q4 2019", 
                              "Q4 2019", "Q4 2019", "Q4 2019", "Q4 2019", "Q4 2019", "Q4 2019", 
                              "Q4 2019", "Q4 2019", "Q4 2019", "Q1 2020", "Q1 2020", "Q1 2020", 
                              "Q1 2020", "Q1 2020", "Q1 2020", "Q1 2020", "Q1 2020", "Q1 2020", 
                              "Q1 2020", "Q1 2020", "Q1 2020", "Q2 2020", "Q2 2020", "Q2 2020", 
                              "Q2 2020", "Q2 2020", "Q2 2020", "Q2 2020", "Q2 2020", "Q2 2020", 
                              "Q2 2020", "Q2 2020", "Q2 2020", "Q3 2020", "Q3 2020", "Q3 2020", 
                              "Q3 2020", "Q3 2020", "Q3 2020", "Q3 2020", "Q3 2020", "Q3 2020", 
                              "Q3 2020", "Q3 2020", "Q3 2020"), 
              Grade = c("Grade 8", "Grade 8", 
                        "Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
                        "Grade 10", "Grade 11", "Grade 11", "Grade 11", "Grade 8", "Grade 8", 
                        "Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
                        "Grade 10", "Grade 11", "Grade 11", "Grade 11", "Grade 8", "Grade 8", 
                        "Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
                        "Grade 10", "Grade 11", "Grade 11", "Grade 11", "Grade 8", "Grade 8", 
                        "Grade 8", "Grade 9", "Grade 9", "Grade 9", "Grade 10", "Grade 10", 
                        "Grade 10", "Grade 11", "Grade 11", "Grade 11"), 
              Type = c("overallAverage", 
                       "CT", "RT", "overallAverage", "CT", "RT", "overallAverage", "CT", 
                       "RT", "overallAverage", "CT", "RT", "overallAverage", "CT", "RT", 
                       "overallAverage", "CT", "RT", "overallAverage", "CT", "RT", "overallAverage", 
                       "CT", "RT", "overallAverage", "CT", "RT", "overallAverage", "CT", 
                       "RT", "overallAverage", "CT", "RT", "overallAverage", "CT", "RT", 
                       "overallAverage", "CT", "RT", "overallAverage", "CT", "RT", "overallAverage", 
                       "CT", "RT", "overallAverage", "CT", "RT"), 
              value = c(2.48, 2.21, 
                        0.27, 3.48, 3.03, 0.45, 4.6, 4, 0.6, 2.8, 2.4, 0.4, 2.54, 2.28, 
                        0.26, 3.45, 3, 0.45, 4.46, 3.88, 0.58, 3.56, 2.81, 0.75, 2.47, 
                        2.14, 0.33, 2.96, 2.54, 0.41, 4.1, 3.69, 0.41, 3.44, 2.61, 0.83, 
                        2, 1.81, 0.19, 2.54, 2.26, 0.28, 4.11, 3.68, 0.43, 2.67, 2.11, 
                        0.56))

 
 q4_2019 <- dat %>% filter(QuarterYear == "Q4 2019") %>%
  group_by(Grade) %>% 
  arrange(Grade) %>%
  plot_ly(
   x = ~Type, 
   y = ~value, 
   color= ~Grade,
   colors = 'Reds',
   type = 'bar', 
   legendgroup=~Grade) %>% 
  layout(xaxis = list(title = "Q4 2019"))
 
 q1_2020 <- dat %>% filter(QuarterYear == "Q1 2020") %>%
  group_by(Grade) %>% 
  arrange(Grade) %>%
  plot_ly(
   x = ~Type, 
   y = ~value, 
   color= ~Grade,
   colors = 'Reds',
   type = 'bar', 
   legendgroup=~Grade, 
   showlegend = FALSE) %>% 
  layout(xaxis = list(title = "Q1 2020"))
 
 
 q2_2020 <- dat %>% filter(QuarterYear == "Q2 2020") %>%
  group_by(Grade) %>% 
  arrange(Grade) %>%
  plot_ly(
   x = ~Type, 
   y = ~value, 
   color= ~Grade,
   colors = 'Reds',
   type = 'bar', 
   legendgroup=~Grade, 
   showlegend = FALSE) %>% 
  layout(xaxis = list(title = "Q2 2020"))
 
 q3_2020 <- dat %>% filter(QuarterYear == "Q3 2020") %>%
  group_by(Grade) %>% 
  arrange(Grade) %>%
  plot_ly(
   x = ~Type, 
   y = ~value, 
   color= ~Grade,
   colors = 'Reds',
   type = 'bar',
   legendgroup =~Grade,
   showlegend = FALSE) %>% 
  layout(xaxis = list(title = "Q3 2020"))
 
  subplot(q4_2019, q1_2020, q2_2020, q3_2020 ,titleX = TRUE,shareY = T) %>% layout(barmode = 'stack', showlegend = TRUE)

subplots and stacked bars in plot_ly

答案 1 :(得分:0)

如果您同时拥有两个图并希望它们以一个图显示,则可以使用以下内容:

fig <- subplot(fig1, fig2)