2014-11-21 6 views
1

나는 M1-M5의 5 배로 측정 된 4 개의 코호트 C1-C4가있는 data.frame입니다.ggplot2 라인 플롯의 색상 및 선형을 여러 열로 매핑하는 방법

library(ggplot2) 
mydf <- data.frame(C1=c(49, 14, 8, 7, 2), 
        C2=c(0, 0, 0, 0, 0), 
        C3=c(13, 17, 7, 8, 8), 
        C4=c(0, 0, 0, 0, 0), 
        M = c("M1", "M2", "M3", "M4", "M5")) 

각 코호트에 대한 측정 값을 표시하는 선을 그립니다.

ggplot(data=mydf) + 
    geom_line(aes(x=M, y=C1, group=1), colour="red") + 
    geom_line(aes(x=M, y=C2, group=2), colour="green") + 
    geom_line(aes(x=M, y=C3, group=3), colour="blue") + 
    geom_line(aes(x=M, y=C4, group=4), colour="black", linetype="dashed") 

수동으로 줄을 그룹화하여 관리했습니다. 그러나, 나는 전설에 문제가있다. 나는 컬러와 라인 스타일을 몇 가지 그룹화 기준에 매핑해야한다고 생각합니다. 하지만 어떻게해야합니까? 집단별로 그룹화해야하지만 한 열 안에 있지 않습니다. 이 수동 그룹화 또는 내 플롯을 구성하는 다른 방법을 사용하여 범례를 만드는 방법이 있습니까? 도움을 주시면 대단히 감사하겠습니다.

+2

[동일한 그래프에서 ggplot2를 사용하여 두 변수를 선으로 그릴 수 있음] (http://stackoverflow.com/questions/3777174/plotting-two-variables-as-lines-using-ggplot2-on-the- 같은 그래프) – Henrik

+0

데이터를 긴 형식으로 "녹여야"합니다. @Henrik 링크에서 @rcs의 대답을 참조하십시오. 각 그룹에 대해 다른 색상으로 플롯을 생성하는 방법 및이를 수행하는 방법을 참조하십시오. 데이터가 녹 으면'geom_line'을 한 번 호출하면됩니다. – eipi10

답변

0

덕분에, 모두가, 즉 크게 도움이되었다. 녹색 실선을 덮기 위해 검은 점선이 필요했기 때문에 선 종류와 색을 조절하는 데 조금 어려움을 겪었습니다. 하지만 결국 문제가 해결되었습니다.

library(ggplot2) 
library(reshape2) 

mydf <- data.frame(M = c("M1", "M2", "M3", "M4", "M5"), 
        C1=c(49, 14, 8, 7, 2), 
        C2=c(0, 0, 0, 0, 0), 
        C3=c(13, 17, 7, 8, 8), 
        C4=c(0, 0, 0, 0, 0)) 
mydf2 <- melt(mydf) 
ggplot(data=mydf2) + 
    geom_line(aes(x=M, y=value, group=variable, colour=variable, linetype=variable)) + 
    scale_linetype_manual(values=c("solid", "solid", "solid", "dashed")) + 
    scale_colour_manual(values=c("red", "green", "blue", "black")) 

다시 한 번 감사드립니다. 매우 도움이되었습니다.

1

여기에 제안 eipi10 무엇의 예 :

mydf <- data.frame(C1=c(49, 14, 8, 7, 2), 
        C2=c(0, 0, 0, 0, 0), 
        C3=c(13, 17, 7, 8, 8), 
        C4=c(0, 0, 0, 0, 0), 
        M = c("M1", "M2", "M3", "M4", "M5")) 

mydf.m <- melt(mydf, id.vars="M", 
       variable.name="my_var_name", 
       value.name="my_value_name") 

mydf.m$linetype_var <- ifelse(mydf.m["my_var_name"]=="C4","dashed","solid") 

my_colors <- c("red","green","blue","black") 

ggplot(mydf.m, aes(x=M, y=my_value_name, 
        group=my_var_name, 
        color=my_var_name, 
        linetype=linetype_var))+ 
    geom_line()+ 
    scale_linetype_identity()+ 
    scale_color_manual(values=my_colors) 
+0

감사! '용융'의 추가 옵션도 매우 유용합니다. 그러나, 저를 위해서, 당신의 버전에서 "C4"에 대한 검은 선이 확실합니다. 내가 귀하의 코드를 올바르게 이해한다면, 그렇게해서는 안됩니다. 왜 그런가? – sthesing

+0

실제로 이유가 확실하지 않습니다. 그러나 당신의 솔루션은 효과가 있습니다. – Matt74

관련 문제