2016-08-27 115 views
2

雖然圖中顯示了不同的顏色,但圖例只顯示一種顏色。我的目標是按照原樣顯示圖例。另外,我是NOT希望使用21和25之間的形狀。我想要使用不同的形狀,例如形狀= 2圖例中的顏色被覆蓋

這裏的源代碼:

#catsM dataset is in MASS package that is shipped by CRAN 
    testM<-catsM 
    testM[1:10,"Sex"] <- "F" 
    ggplot(testM,aes(Bwt,Hwt)) + 
     geom_point(aes(color=Sex), shape = 2) + 
     geom_smooth(method = "glm", se = FALSE, 
        aes(linetype = "glm line"), color = "red") + 
     geom_smooth(method = "lm", span = 0.5, 
        aes(linetype = "lm line"), color = "yellow") + 
     scale_color_manual(values = c("magenta","black")) 

這裏的輸出。我們可以看到第二行lm的顏色代碼覆蓋了glm的紅色。有沒有解決這個問題?我會很感激你的想法。 enter image description here


我張貼dput():

dput(catsM) 
structure(list(Sex = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("F", "M"), class = "factor"), 
    Bwt = c(2, 2, 2.1, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 
    2.3, 2.4, 2.4, 2.4, 2.4, 2.4, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 
    2.5, 2.5, 2.6, 2.6, 2.6, 2.6, 2.6, 2.6, 2.7, 2.7, 2.7, 2.7, 
    2.7, 2.7, 2.7, 2.7, 2.7, 2.8, 2.8, 2.8, 2.8, 2.8, 2.8, 2.8, 
    2.9, 2.9, 2.9, 2.9, 2.9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3.1, 
    3.1, 3.1, 3.1, 3.1, 3.1, 3.2, 3.2, 3.2, 3.2, 3.2, 3.2, 3.3, 
    3.3, 3.3, 3.3, 3.3, 3.4, 3.4, 3.4, 3.4, 3.4, 3.5, 3.5, 3.5, 
    3.5, 3.5, 3.6, 3.6, 3.6, 3.6, 3.7, 3.8, 3.8, 3.9, 3.9), Hwt = c(6.5, 
    6.5, 10.1, 7.2, 7.6, 7.9, 8.5, 9.1, 9.6, 9.6, 10.7, 9.6, 
    7.3, 7.9, 7.9, 9.1, 9.3, 7.9, 8.6, 8.8, 8.8, 9.3, 11, 12.7, 
    12.7, 7.7, 8.3, 9.4, 9.4, 10.5, 11.5, 8, 9, 9.6, 9.6, 9.8, 
    10.4, 11.1, 12, 12.5, 9.1, 10, 10.2, 11.4, 12, 13.3, 13.5, 
    9.4, 10.1, 10.6, 11.3, 11.8, 10, 10.4, 10.6, 11.6, 12.2, 
    12.4, 12.7, 13.3, 13.8, 9.9, 11.5, 12.1, 12.5, 13, 14.3, 
    11.6, 11.9, 12.3, 13, 13.5, 13.6, 11.5, 12, 14.1, 14.9, 15.4, 
    11.2, 12.2, 12.4, 12.8, 14.4, 11.7, 12.9, 15.6, 15.7, 17.2, 
    11.8, 13.3, 14.8, 15, 11, 14.8, 16.8, 14.4, 20.5)), .Names = c("Sex", 
"Bwt", "Hwt"), row.names = c("1", "2", "3", "4", "5", "6", "7", 
"8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", 
"19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", 
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", 
"41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", 
"52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", 
"63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", 
"74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", 
"85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", 
"96", "97"), class = "data.frame") 
+0

我收到一條警告消息時,我嘗試'的數據( 'catsM',包= 「MASS」)' –

+0

@ 42-對不起警告問題。我不知道爲什麼我沒有得到它。所以,我添加了dput()。 – watchtower

+0

@ 42-試試'data('cats',package ='MASS')'。 catsM也不適合我,但是MASS文檔現在指向'貓'而不是'貓'。 –

回答

3

我還沒有完全掌握GGPLOT2的傳說所有的怪癖,但如果你想強迫它,在guides選項將允許你手動設置:

testM<-catsM 
testM[1:10,"Sex"] <- "F" 
ggplot(testM,aes(Bwt,Hwt)) + 
    geom_point(aes(color=Sex), shape = 2) + 
    geom_smooth(method = "glm", se = FALSE, 
      aes(linetype = "glm line"), color = "red") + 
    geom_smooth(method = "lm", span = 0.5, 
      aes(linetype = "lm line"), color = "yellow") + 
    scale_color_manual(values = c("magenta","black")) + 
    guides(linetype = guide_legend(override.aes = list(color = c("red", "yellow")))) 
0

對於離散變量映射美學shape是另一種選擇。不知道它會多麼好,當談到設計美學和美國:

ggplot(testM,aes(Bwt,Hwt)) + 
    geom_point(aes(shape= Sex)) + 
    geom_smooth(method = "glm", se = FALSE, 
       aes(linetype = "glm", color = 'glm')) + 
    geom_smooth(method = "lm", span = 0.5, 
       aes(linetype = "lm", color ='lm'), size = 4) + 

    scale_linetype_discrete(name = "Method") + 
    scale_color_manual(name = "Method", values = c('red', 'yellow')) 
+0

Pj_我想我已經提到,我想形狀不等於21.不幸的是,這並沒有幫助我.. ...這是再次快速修復,而不是一個程序化的解決方案,爲非可填充的形狀(即形狀超出範圍21和25),我正在尋找... – watchtower

+0

@ ss0208535我會更新我的答案。 –

+0

@ ss0208535請檢查並更新您的問題,並在21和25內添加此信息,表明您並非真正想要使用形狀。這可能會誤導很多試圖幫助您的用戶。 –