2016-01-08 35 views
1

Creating a ggplot legend with both color and shape有一種方法可以將形狀和顏色組合起來,但基於一個變量。我想知道如果變量被分解爲兩個變量,這是否可能。根據兩個變量創建具有顏色和線型的ggplot圖例

海爾是一個測試數據:

(x <- data.frame(time =rep(1:5,4) 
       , sex = rep(c("m","f"), each=5) 
       , val_type = rep(c("obs","fit"),each=10) 
       , val = rep(1:4,each=5)*rep(1:5,4) 
       ) 
) 

爲了顯示我多麼希望有傳說我結合了兩個變量:

x$sv <- paste(x$sex,x$val_type,sep='-') 

這裏是一個變量ggplot:

ggplot(data=x, aes(x=time, y=val, linetype=sv, col=sv)) + 
     geom_line() + 
     scale_colour_manual(name = "" 
          , values=c("red","red","blue","blue") 
          , labels=c("Female fitted","Female observed" 
            ,"Male fitted","Male observed") 
          ) + 
     scale_linetype_manual(name = "" 
          , values=c(1,2,1,2) 
          , labels=c("Female fitted","Female observed" 
            ,"Male fitted","Male observed") 
          ) 

這裏是情節:

enter image description here

我想有同樣的傳說,但使用這兩個變量分別

ggplot(data=x, aes(x=time, y=val, linetype=val_type, col=sex)) + 
     geom_line() 

這可能嗎?我不想使用組合變量的原因是我不想創建我不需要分析的變量。另一個原因是看傳奇如何可以手動定製。 感謝您的幫助。

+2

這是很常見的,經常需要創建一個數據幀只是一個單一的情節,尤其是對於複雜的情節。我不認爲這是一個問題。但無論如何這是個好問題。 –

回答

2

我沒有看到創建一個新的變量作爲一個主要問題(特別是如果你會使用管道)。但是,是的,可以使用interaction函數並使用手動縮放定義。

ggplot(data = x, 
     aes(x = time, 
      y = val, 
      linetype = interaction(val_type, sex), 
      col = interaction(val_type, sex))) + 
    geom_line() + 
    scale_colour_manual(name = "" 
         , values=c("red","red","blue","blue") 
         , labels=c("Female fitted","Female observed" 
           ,"Male fitted","Male observed") 
) + 
    scale_linetype_manual(name = "" 
         , values=c(1,2,1,2) 
         , labels=c("Female fitted","Female observed" 
            ,"Male fitted","Male observed") 
) 

enter image description here

+0

非常感謝! ggplot不斷地給我帶來新的命令/參數/函數,例如「交互」。 – giordano

+0

(「互動」來自基地!) – arvi1000

相關問題