多个图例/导游的排序(什么是自动的逻辑如何改变呢?)(Ordering of multiple le

2019-06-23 10:42发布

我无意中发现了与传说的ggplot2s订购这种怪异的行为,只是无法弄清楚背后的传说的自动放置的逻辑是:

我的目标:与多尺度我想他们在不同的(专题)的顺序自动安排一个情节。 但是我无法找到OPTS()或导游的命令()为我做到这一点。 而仅仅是明确的:我不想改变传说中的项目,工作正常,但多个完整传说的安排。

首先,我认为他们是按类型,即规模,颜色等下令但事实并非如此,他们的位置的变化(见下文)。

按字母顺序? 没有。

    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”:底部

并继续出现在底部顶部。

阶乘的订单? 没有。

    ## 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])

标题的长度是多少? 不,我会停下来为现在的示例代码,但一个也产生波动的订单独立字符长度的。

有任何想法吗?

Answer 1:

正如我在上面的评论中提及,有没有办法来控制和预测的传奇框的位置。 我不知道这个问题的。 感谢您使清除此。

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

# 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的下一个正式版本进行更改。



文章来源: Ordering of multiple legends/guides (what is the automatic logic & how to change it?)
标签: r ggplot2