首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的ggplot2图中的图例组会翻转?

为什么我的ggplot2图中的图例组会翻转?
EN

Stack Overflow用户
提问于 2021-11-19 11:42:55
回答 1查看 26关注 0票数 0

我有一个奇怪的问题,我似乎无法弄清楚--我的ggplot2图中的图例组正在翻转。下面我做了一个可重现的例子:

我有以下数据框,animals

代码语言:javascript
复制
animals <- structure(list(ID = c("A_7_1", "A_7_2", "A_7_3", "A_99_1", "A_99_2", 
"D_7_1", "D_7_3", "D_99_1", "D_99_2", "D_99_3", "H_7_1", "H_7_2", 
"H_7_3", "H_20_1", "H_20_2", "H_20_3", "M_7_1", "M_7_2", "M_7_3", 
"M_99_1", "M_99_2", "M_99_3", "U_7_1", "U_7_2", "U_7_3", "U_99_1", 
"U_99_2", "U_99_3"), Val1 = c(-116, -118, -119, -123, -124, -110, 
-109, -116, -115, -115, 365, 369, 360, 353, 350, 371, -92, -93, 
-93, -91, -92, -92, -78, -77, -78, -73, -72, -74), Val2 = c(-18, 
-15, -16, -10, -9, -41, -40, -41, -40, -41, -11, -10, -12, -10, 
-9, -14, -186, -183, -184, -183, -184, -179, 235, 240, 238, 239, 
242, 243), FirstGroup = c("Armadillo", "Armadillo", "Armadillo", 
"Armadillo", "Armadillo", "Dog", "Dog", "Dog", "Dog", "Dog", 
"Hippo", "Hippo", "Hippo", "Hippo", "Hippo", "Hippo", "Monkey", 
"Monkey", "Monkey", "Monkey", "Monkey", "Monkey", "Urchin", "Urchin", 
"Urchin", "Urchin", "Urchin", "Urchin"), SecondGroup = c("Untreated", 
"Untreated", "Untreated", "Treated", "Treated", "Untreated", 
"Untreated", "Treated", "Treated", "Treated", "Untreated", "Untreated", 
"Untreated", "Treated", "Treated", "Treated", "Untreated", "Untreated", 
"Untreated", "Treated", "Treated", "Treated", "Untreated", "Untreated", 
"Untreated", "Treated", "Treated", "Treated")), row.names = c(NA, 
-28L), class = "data.frame", prop_var = c(X = 0.43806, Y = 0.24221
))

head(animals)
      ID Val1 Val2 FirstGroup SecondGroup
1  A_7_1 -116  -18  Armadillo   Untreated
2  A_7_2 -118  -15  Armadillo   Untreated
3  A_7_3 -119  -16  Armadillo   Untreated
4 A_99_1 -123  -10  Armadillo     Treated
5 A_99_2 -124   -9  Armadillo     Treated
6  D_7_1 -110  -41        Dog   Untreated

我有一个函数来绘制这个数据帧中的值:

代码语言:javascript
复制
myplot <- function(x) {
    plot <- 
        ggplot(x,
            aes_string(
                x = paste0("`Val1`"),
                y = paste0("`Val2`"))
        ) +
        geom_point(
            aes_string(
                fill = paste0("`FirstGroup`"),
                shape = paste0("`SecondGroup`")),
            size = 4, alpha = 0.9, color = "black"
        ) +
        scale_fill_manual(
            values = fgplots::brew_fg_colors(length(unique(x$FirstGroup))),
            name = "FirstGroup",
            guide = guide_legend(override.aes = list(shape = 21))
        ) +
        scale_shape_manual(
            name = "SecondGroup", values = c(21, 22)
        )
    plot
}

我可以运行以下命令来绘制图:

代码语言:javascript
复制
png("myplot1.png")
myplot(animals)
dev.off()

但是,当我将animals对象过滤为仅包含某些动物组时,图例中的组顺序会颠倒:

代码语言:javascript
复制
animals_filt <- animals %>%
    dplyr::filter(FirstGroup %in% c("Armadillo", "Urchin"))

png("myplot2.png")
myplot(animals_filt)
dev.off()

也就是说,SecondGroup已经移到了图例的顶部,而我希望FirstGroup在顶部。为什么会发生这种情况?我如何修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-19 12:02:23

多亏了Richard Telford上面的评论,我在我的函数中包含了order = 1,这个函数已经修复了它。谢谢!

代码语言:javascript
复制
myplot <- function(x) {
    plot <- 
        ggplot(x,
            aes_string(
                x = paste0("`Val1`"),
                y = paste0("`Val2`"))
        ) +
        geom_point(
            aes_string(
                fill = paste0("`FirstGroup`"),
                shape = paste0("`SecondGroup`")),
            size = 4, alpha = 0.9, color = "black"
        ) +
        scale_fill_manual(
            values = fgplots::brew_fg_colors(length(unique(x$FirstGroup))),
            name = "FirstGroup",
            guide = guide_legend(override.aes = list(shape = 21), order = 1)
        ) +
        scale_shape_manual(
            name = "SecondGroup", values = c(21, 22)
        )
    plot
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70034313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档