代码之家  ›  专栏  ›  技术社区  ›  user3115933

这种类型的绘图可以用ggplot2完成吗?

  •  4
  • user3115933  · 技术社区  · 6 年前

    R ggplot2 GG2地块 . 但是,我从来没有见过这样的情节 GG2地块 .

    GG2地块 代码。如何对齐这些文本?

    Bar graph

    3 回复  |  直到 6 年前
        1
  •  9
  •   Maurits Evers    6 年前

    这很接近:

    # Generate sample data (I'm too lazy to type out the full labels)
    df <- data.frame(
        perc = c(60, 36, 44, 41, 42, 57, 34, 52),
        type = rep(c("blue", "green"), 4),
        label = rep(c(
            "Individual reports created as needed",
            "Regular reports on single topics",
            "Analytics using data integrated from multiple systems",
            "Business unit-specific dashboards and visuals"), each = 2))
    
    
    library(ggplot2)
    ggplot(df, aes(1, perc, fill = type)) +
        geom_col(position = "dodge2") +
        scale_fill_manual(values = c("turquoise4", "forestgreen"), guide = FALSE) +
        facet_wrap(~ label, ncol = 1, strip.position = "bottom") +
        geom_text(
            aes(y = 1, label = sprintf("%i%%", perc)),
            colour = "white",
            position = position_dodge(width = .9),
            hjust = 0,
            fontface = "bold") +
        coord_flip(expand = F) +
        theme_minimal() +
        theme(
            axis.title = element_blank(),
            axis.text = element_blank(),
            axis.ticks = element_blank(),
            panel.grid.major = element_blank(),
            panel.grid.minor = element_blank(),
            strip.text = element_text(angle = 0, hjust = 0, face = "bold"))
    

    enter image description here

    一些解释:

    1. 我们使用闪避条和匹配闪避标签 position = "dodge2" (请注意,这需要 ggplot_ggplot2_3.0.0 position = position_dodge(width = 1.0) )以及 position = position_dodge(width = 0.9) 分别是。
    2. 我们使用 facet_wrap
    3. coord_flip(expand = F) expand = F 确保左对齐( hjust = 0
        2
  •  4
  •   Roman    6 年前

    scales::percent 绘制百分比。我们使用 ggpubr::theme_transparent() 主题尽可能少地调整。

    df$perc <- c(.60, .36, .44, .41, .42, .57, .34, .52)
    
    ggplot(df, aes(label, perc, label=scales::percent(round(perc,2)),fill= factor(type))) + 
       geom_col(position = position_dodge(0.9), show.legend = F) + 
       geom_text(aes(y=0), position = position_dodge(0.9), size=5, hjust=-0.1, color="white", fontface="bold") +
       scale_y_continuous("",labels = scales::percent) + 
       coord_flip(expand = F) + 
       facet_wrap(~label,scales = "free", strip.position = "bottom", ncol = 1) +
       ggpubr::theme_transparent() +
       xlab("") + 
       theme(strip.background = element_blank(),
             strip.text = element_text(size = 12, face = "bold",hjust=0))
    

    enter image description here

        3
  •  0
  •   RobertE    6 年前

    dat <- data.frame(perc = c(60, 20, 90, 30), col = rep(c("gr1", "gr2"), 2),
                      text = c(rep("text1", 2), rep("text2", 2)))
    
    ggplot(dat, aes(y = perc, x = col, fill = col)) +
      geom_bar(stat = "identity", position = "dodge") +
      coord_flip() +
      facet_wrap(~text, strip.position = "bottom", ncol = 1)