首页 文章

订购多个图例/指南(什么是自动逻辑以及如何更改它?)

提问于
浏览
18

我偶然发现这个奇怪的行为与ggplot2s传说的排序,只是无法弄清楚传说的自动放置背后的逻辑是:

我的目标:在具有多个音阶的情节中,我想以不同于自动音阶的顺序排列它们 . 但我无法在opts()或指南()中找到一个命令来为我做这个 . 而且要明确:我不想改变传说中的项目,这很好,但是多个完整的传说的安排 .

所以首先我假设它们按类型排序,即比例,颜色等 . 但事实并非如此,它们的位置会发生变化(见下文) .

Alphabetical order? 不 .

library(ggplot2) ## v0.9

    ## Scale_colour on top
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "A") + scale_colour_discrete(name = "B")

    ## Reverse names --> scale_colour on bottom
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "B") + scale_colour_discrete(name = "A")

    ## Change name B to C -->  scale_colour on bottom
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "C") + scale_colour_discrete(name = "A")

    ## Change name B to D -->  scale_colour on top
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "D") + scale_colour_discrete(name = "A")

scale_colour的其他位置(用于交换的scale_size名称)

  • "E":底部

  • "F" - "L":顶部

  • "M" - "N":底部

它继续出现在底部的顶部 .

Factorial order? 没有 .

## From top to bottom: C - B - A
    fname <- factor(c("A","B","C"), levels = c("A","B","C"))
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl) +
    scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])

    ## From top to bottom: B - C - A
    fname <- factor(c("A","B","C"), levels = c("C","B","A"))
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl) +
    scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])

    ## From top to bottom: B - C - A
    fname <- factor(c("A","B","C"), levels = c("B","C","A"))
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
    scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])

Length of title? 不 . 我现在停止使用示例代码,但是那个也产生了与字符长度无关的波动顺序 .

有任何想法吗?

1 回答

  • 17

    正如我在上面的评论中提到的,没有办法控制和预测图例框的位置 . 我不知道这个问题 . 谢谢你说清楚这一点 .

    也许有些人需要控制传说框,我在这里快速修复:

    # run this code before calling ggplot2 function
    guides_merge <- function(gdefs) {
      gdefs <- lapply(gdefs, function(g) { g$hash <- paste(g$order, g$hash, sep = "z"); g})
      tapply(gdefs, sapply(gdefs, function(g)g$hash), function(gs)Reduce(guide_merge, gs))
    }
    environment(guides_merge) <- environment(ggplot)
    assignInNamespace("guides_merge", guides_merge, pos = "package:ggplot2")
    

    然后你可以使用 order 参数 guide_legend (以及 guide_colorbar ),

    # specify the order of the legend.
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
     guides(size = guide_legend(order = 1), colour = guide_legend(order = 2), alpha = guide_legend(order = 3))
    
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
     guides(size = guide_legend(order = 3), colour = guide_legend(order = 1), alpha = guide_legend(order = 2))
    

    order 参数应为正整数 . 传说按顺序排列 . 请注意,这是一个快速修复,因此可以在ggplot2的下一个正式版本中更改界面 .

相关问题