2016-10-17 28 views
0

私はいくつかの異なるシリーズのラインプロットをプロットしようとしています。各シリーズは異なるライン幅で描画され、それぞれは色を決定するいくつかのグループの1つに属します。ggplot凡例の2つの部分に色を表示する方法は?

私がしなければならないことは、グループ名と色だけでなく、個々のシリーズ名とそれぞれの幅と色の組み合わせを示す凡例を作成することです。

# Create data 
names <- c("A", "B", "C", "D", "E", "F") 

df <- data.frame(
    name = rep(names, 3), 
    group = rep(c(rep("X", 2), rep("Y", 2), rep("Z", 2)), 3), 
    x = c(rep(1, 6), rep(2, 6), rep(3, 6)), 
    y = c(runif(6, 0, 1), runif(6, 1, 2), runif(6, 2, 3)), 
    stringsAsFactors=FALSE 
) 


line.widths <- setName(runif(6, 0, 3), names) 
group.colors <- setNames(c("#AA0000", "#00AA00", "#0000AA"), c("X", "Y", "Z")) 
name.colors <- setNames(c(rep("#AA0000", 2), rep("#00AA00", 2), rep("#0000AA", 2)), 
         names) 

そして今、プロット:

は、最小限の作業例を挙げれば

library(ggplot2) 

# Names and groups separately 
ggplot(df, aes_string(x="x", y="y", group="name")) + 
    geom_line(aes(size=name, color=group)) + 
    scale_size_manual(values=line.widths) + 
    scale_color_manual(values=group.colors) 

Six lines, with three different colors and three different line sizes.

私の質問は、それがname部分にグループの色を追加することが可能ですかどうかであります伝説の、groupの部分を失うことなく。

ありがとうございます!

答えて

1

あなたは信じられないほどです。(よく研究され、試みられた質問に感謝します)。あなたはそうのように、凡例にoverride.aesを追加する必要があります。

ggplot(df, aes_string(x="x", y="y", group="name")) + 
    geom_line(aes(size=name, color=group)) + 
    scale_size_manual(values=line.widths) + 
    scale_color_manual(values=group.colors) + 
    guides(size = guide_legend(override.aes = list(col = name.colors))) 

enter image description here

+0

感謝を!答えは '' override.aes''と答えた気がしましたが、私はまだ '' guide''、 '' guide_legend''、 '' override.aes''の中で頭を包んでいません。 –

関連する問題