21

凡例の ggplot2s の順序でこの奇妙な動作に出くわしましたが、凡例の自動配置の背後にあるロジックが何であるかを理解できません:

私の目的:複数のスケールを持つプロットで、自動のものとは異なる (テーマ別) 順序でそれらを配置したいと考えています。しかし、これを行うためのコマンドが opts() または guides() に見つかりませんでした。明確にするために、凡例内の項目を変更したくありませんが、それは正常に機能しますが、複数の完全な凡例の配置です。

最初に、スケール、色などのタイプで並べられていると仮定しました。しかし、そうではなく、位置が変わります (以下を参照)。

アルファベット順?いいえ。

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

タイトルの長さ?いいえ、ここではサンプル コードで停止しますが、そのコードでも、文字の長さに関係なく変動する順序が発生しました。

何か案は?

4

1 に答える 1

18

上記のコメントで述べたように、凡例ボックスの位置を制御および予測する方法はありません。私はこの問題を知りませんでした。これを明確にしていただきありがとうございます。

凡例ボックスを制御する必要がある人もいるかもしれませんが、ここで簡単な修正を行います。

# 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_legendguide_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 の次の公式バージョンでインターフェイスが変更される可能性があることに注意してください。

于 2012-04-06T00:38:37.427 に答える