3

geom_hline または geom_abline で使用される線種を ggplot プロットの凡例に表示するにはどうすればよいですか?

例えば:

require (ggplot2)

# some data
dummy <- data.frame (category1 =  rep (1:5, 8), category2 = rep (1:4, each = 10), 
    category3 = rep (factor (1:2), 2), expected = 10 ^ rep (4:7, each = 10),
    value = 10 ^rnorm(40, 5))

# faceted plot
baseplot <-ggplot (dummy ) +
    geom_point (aes (category1, value, color = category3))+
    scale_y_log10 () + 
    facet_wrap (~category2)

# add a dotted line for expected value
p1 <-baseplot + geom_hline ( aes ( yintercept = expected), linetype = 2)

凡例に点線を表示するためにいくつかのアプローチを試みましたが、p1 と同じ結果が得られました

p1a < -p1+scale_linetype_discrete (labels = "expected")+
    guides ( linetype= guide_legend ("", labels ="expected"))
p1b <- baseplot + geom_hline (aes (yintercept = expected, linetype = "expected")) +
    scale_linetype_manual (labels= "expected", values = 2)
p1a
p1b

複数の線/線種はどうですか?

グループごとの幾何平均と全体的な幾何平均もプロットしたいとしましょう

require (reshape)
require (plyr)

# calculate geometric means, keep them in their own data frame
geometric_mean <- function (x)  exp ( mean (log (x)))
dummy $GM_overall <- geometric_mean (dummy $value)
extra <- ddply(dummy, c( "GM_overall", "expected","category2"), summarize,
    GM_group = geometric_mean (value))
extra_long <- melt (GM_group_long, id.vars = "category2")

この投稿に基づいて、このアプローチが凡例に線種を表示することを期待していましたが、そのような運はありませんでした

p2=baseplot + geom_hline ( aes ( yintercept = value , linetype = variable), extra)
p2

ablineで同様のことをしたい別のケースがあります

ラインに 1:1 のラベルを付けられるとよいでしょう。

dummy$value2 <- dummy $value * runif(40, 0.5, 2)
ggplot (dummy)+coord_fixed() +    
    geom_point (aes (value, value2, color = category3))+
    geom_abline (yintercept =0, slope =1) 

R 3.0.0、ggplot 0.9.3.1 を使用しています

4

1 に答える 1

3

いくつかの例を実行しますが、この単純なケースでほとんどの方法を理解できるはずです。

dummy <- data.frame (category1 =  rep (1:5, 8), category2 = rep (1:4, each = 10), 
    category3 = rep (factor (1:2), 2), expected = 10 ^ rep (4:7, each = 10),
    value = 10 ^rnorm(40, 5))

# faceted plot
baseplot <- ggplot(dummy) +
    geom_point(aes(category1, value, color = category3))+
    scale_y_log10() + 
    facet_wrap(~category2)

# add a dotted line for expected value
baseplot + geom_hline(aes(yintercept = expected,linetype = "expected"),show_guide = TRUE)

ほとんどの場合、鍵は を追加することだと思いますshow_guide = TRUE。これはFALSEデフォルトで、この geom の場合であり、直感的である場合とそうでない場合があります。(理屈はわかります。)

この「1行タイプ」のケースでは、線種を「期待される」文字にマッピングすることにより、ggplotを「だまして」凡例を作成する方法に注意してください。これにより、新しい列が舞台裏で作成されます。複数の線種は、柱を作成して線種にマッピングする通常の方法で期待どおりに機能するはずです。

于 2013-06-03T17:58:45.957 に答える