代码之家  ›  专栏  ›  技术社区  ›  Sylvia Rodriguez

在ggplot2中重新排列颜色和图案图例

  •  0
  • Sylvia Rodriguez  · 技术社区  · 5 年前

    我使用下面的代码。

    city , split . 我怎样才能把订单倒过来 分裂 城市 ? 我试着用秩序 guides()

     library(ggplot2)
     library(ggpattern)
     df <- data.frame(
     no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
     city = c(rep("Madrid", 47), rep("New York", 13)),
     split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2), 
           rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8), 
           rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
     ggplot(data = df, aes(x = no, fill = city, pattern = split)) +
       geom_bar_pattern(
                        color = "black", 
                        pattern_fill = "black",
                        pattern_angle = 45,
                        pattern_density = 0.1,
                        pattern_spacing = 0.01,
                        pattern_key_scale_factor = 0.6) + 
       scale_pattern_manual(values = c(blue = "stripe", red = "none")) + 
       guides(pattern = guide_legend(override.aes = list(fill = "white")),
              fill = guide_legend(override.aes = list(pattern = "none", order=1), # this line is incorrect?
              pattern = guide_legend(order = 0)   # or this line is incorrect?
               ))
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   iamericfletcher    5 年前

    我的零钱 guides() 结果 split 在上面显示 city order . 根本没有 order = 0

     library(ggplot2)
     library(ggpattern)
    
     df <- data.frame(
     no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
     city = c(rep("Madrid", 47), rep("New York", 13)),
     split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2), 
           rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8), 
           rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
     ggplot(data = df, aes(x = no, fill = city, pattern = split)) +
       geom_bar_pattern(
                        color = "black", 
                        pattern_fill = "black",
                        pattern_angle = 45,
                        pattern_density = 0.1,
                        pattern_spacing = 0.01,
                        pattern_key_scale_factor = 0.6) + 
       scale_pattern_manual(values = c(blue = "stripe", red = "none")) + 
       guides(pattern = guide_legend(override.aes = list(fill = "white"), order = 2),
              fill = guide_legend(override.aes = list(pattern = "none", order=1)   
              ))
    

    于2021-03-14由 reprex package (第0.3.0版)

    以防万一你决定要重新排列图中的条

     df <- data.frame(
     no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
     city = c(rep("Madrid", 47), rep("New York", 13)),
     split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2), 
           rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8), 
           rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
     
    df1 <- df %>% 
       group_by(no) %>% 
       mutate(
         count_no_freq = n()
       )
     
     ggplot(data = df1, aes(x = reorder(no, -count_no_freq), fill = city, pattern = split)) +
       geom_bar_pattern(
                        color = "black", 
                        pattern_fill = "black",
                        pattern_angle = 45,
                        pattern_density = 0.1,
                        pattern_spacing = 0.01,
                        pattern_key_scale_factor = 0.6) + 
       scale_pattern_manual(values = c(blue = "stripe", red = "none")) + 
       guides(pattern = guide_legend(override.aes = list(fill = "white"), order = 2),
              fill = guide_legend(override.aes = list(pattern = "none", order=1)   
              ))
    
    

    reprex包

    enter image description here