簡體   English   中英

如何按變量拆分 R 中的分組條形圖

[英]How do I split grouped bar chart in R by variable

我正在嘗試按變量spec拆分附加的分組條形圖。 關於最好的方法的兩個想法是添加 facet_grid() 或者是否可以將過濾器應用於靜態輸出? 都可以做嗎? 任何建議表示贊賞。

示例如下:

period <- c('201901', '201901', '201904', '201905')
spec <- c('alpha', 'bravo','bravo', 'charlie')
c <-  c(5,6,3,8)
e <- c(1,2,4,5)


df <- data.frame(period, spec, c,e)

library(tidyverse)
library(plotly)

plot_ly(df, x =~period, y = ~c, type = 'bar', name = "C 1", marker = list(color = 'lightsteelblue3')) 
%>%
  add_trace(y = ~e, name = "E 1", marker = list(color = 'Gray')) %>%
  layout(xaxis = list(title="", tickangle = -45),
         yaxis = list(title=""),
         margin= list(b=100), 
         barmode = 'group'
  )

我不確定您是否正在繪制您真正想要實現的目標? 我的建議是使用標准 ggplot 創建您的繪圖,然后使用ggplotly

為此,您還需要重塑數據並使其更長一些。

library(tidyverse)
library(plotly)

period <- c('201901', '201901', '201904', '201905')
spec <- c('alpha', 'bravo','bravo', 'charlie')
c <-  c(5,6,3,8)
e <- c(1,2,4,5)


df <- data.frame(period, spec, c,e) %>% 
        pivot_longer(cols = c(c,e), names_to = 'var', values_to = 'val')


p <- ggplot(df, aes(period, val, fill = var)) +
  geom_col(position = position_dodge()) +
  facet_grid(~spec)

ggplotly(p)

在此處輸入圖片說明

在這里使用 facet 可能更容易,但更“交互”的選項是使用filter transforms ,它會在繪圖的左上角為您提供一個下拉菜單。

spec.val <- unique(df$spec)
plot_ly(
    df %>% pivot_longer(-c(period, spec)),
    x = ~period, y = ~value, color = ~name,
    type = "bar",
    transforms = list(
        list(
            type = "filter",
            target = ~spec,
            operation = "=",
            value = spec.val[1]))) %>%
    layout(
        updatemenus = list(
            list(
                type = "drowdown",
                active = 0,
                buttons = map(spec.val, ~list(
                    method = "restyle",
                    args = list("transforms[0].value", .x),
                label = .x)))))

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM