2011-09-19 3 views
30

동일한 데이터 시트에 3 개의 데이터 세트를 플롯하려고합니다. 하나의 데이터 세트는 연결되지 않은 지점의 집합으로 그래프에 나타나야하며 다른 두 데이터 집합은 연결된 데이터 요소로 나타나야합니다. I 아래에 다음 코드를 이용하여 그래프를 생성 할 수geom_point() 및 geom_line() ggplot2의 동일한 그래프에있는 여러 데이터 세트

x <- c(1,2,3,4) 
y <- c(1.1,1.2,1.3,1.4) 
y2 <- c(2.1,2.2,2.3,2.4) 
x3 <- c(4,5,6,7) 
y3 <- c(3.1,3.2,3.3,3.2) 
p1 <- data.frame(x=x,y=y) 
p2 <- data.frame(x=x,y=y2) 
p3 <- data.frame(x=x3,y=y3) 

plot(x,y,type="o", col="red") 
points(x3,y3,col="darkgreen",pch=16) 
points(x,y2,type="o",col="blue") 

코드에 도시 ​​된 바와 같이, 유형의 플롯 점의 두 가지가있다 "O"의 점은 선으로 연결되어 있다는 것을 의미 여기서 한 세트의 점은 선으로 연결되지 않습니다. 나는 ggplot2에서 이것을 재현하려고 노력했다. 내가 ggplot2에서 다음을 수행하십시오

zz <- melt(list(p1=p1,p2=p2,p3=p3), id.vars="x") 
ggplot(zz, aes(x.value, color = L1)) 
+ geom_point() + scale_color_manual("Dataset", 
values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 

위를하는, 아직 물론 빨간색과 파란색 점을 각각 연결되어 있지 않은, 세 가지 색상으로 포인트의 세 세트를 얻을. 나는 다음과 같은 한 그래서 나는 위의 명령에 geom_line()를 추가 할 수있는 포인트를 연결하려면이 모든 점을 연결하는 선을 초래 물론

ggplot(zz, aes(x.value, color = L1)) + geom_point() + 
scale_color_manual("Dataset", values = 
c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) + geom_line() 

, 모든 빨간색 포인트가 연결되도록 서로 다른 모든 청색 점은 서로 연결되어 있으며 모든 녹색 점은 서로 연결되어 있습니다. 그러나 빨강 및 파랑 점을 연결하려면 녹색 점을 연결하지 않아야합니다. 이것을 할 수있는 방법이 있습니까?

내가 다음 (또는 유사) 할 수있는 :이 명령으로

ggplot(p2, aes(x,y)) + geom_point(color = "blue") + geom_line(color="blue") 
+ geom_point(data=p3, color = "red") + 
geom_line(data=p3, color="red") + geom_point(data=p1, color = "darkgreen") 

, 붉은 점을 연결, 파란색은 연결하고, 녹색이 끊어집니다. 그러나 전설에 모든 포인트 색상을 표시 할 수 있기를 원하므로이 작업을 원하지 않습니다 (이 솔루션에는 전설이 표시되지 않습니다).

+1

실행하려고 할 때 찾은 예제 스크립트에 약간의 오류가 있습니다. 'aes (x.value, color = L1)'은'aes (x, value, color = L1)'이어야합니다. – pedromanoel

+0

감사합니다. 귀하의 질문도 저에게 도움이되었습니다. –

답변

35

트릭은 각 레이어가 자체 데이터 세트를 가질 수 있다는 것입니다. 그래서 당신은 geom_line에 제공되는 데이터에서 L1=="p1"를 제외 할 데이터를 부분 집합해야 :

ggplot(zz, aes(x, y=value, color=L1)) + 
    geom_point() + 
    geom_line(data=zz[zz$L1!="p1", ]) + 
    scale_color_manual("Dataset", 
     values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 

enter image description here

9

당신은 각각의 기하 구조에 다른 데이터 세트를 공급할 수 있습니다. 따라서 p1을 제외한 데이터 세트를 geom_line 레이어에 전달할 수 있습니다. 이 같은 것이 작동해야합니다 :

ggplot(zz, aes(x, value, color = L1)) + 
    geom_point() + 
    geom_line(data = subset(zz, L1 %in% c("p2", "p3")), aes(group = L1)) + 
    scale_color_manual("Dataset", values = c("p1" = "darkgreen", "p2" = "blue", "p3" = "red")) 
관련 문제