2012-07-13 6 views
5

ggplot2에서 하나의 "클래스"의 일부로 여러 줄을 표시하려고합니다. 나는 다음과 같은 플롯 할 수 있습니다 :ggplot : 하나의 색상/클래스에 대한 여러 줄

image with 5 classes을하지만 내 문제는 내가 하나의 클래스와 N1, N2 및 N3를 표시 할 것입니다 (전설의 단일 이름을 가진 각각의 회색 얇은 선) .

내 문제는 그룹화하기 위해 데이터 프레임에 새 요소를 만드는 경우 n1 (오른쪽 상단) 끝에서 n2 (왼쪽 하단) 시작 부분까지 추가 연결을 그립니다. 내 그래프에서 대각선 추가 : 내가 원하는 가까이하지만 추가 대각선 라인을 가지고

graph with one class

합니다. 중요한 경우 ROCR을 사용하여 이러한 값을 계산 한 다음 결과 행 performance에서 x 및 y 점을 추출하여 이러한 선을 생성합니다.

+1

최소한의 재현 가능한 예제 (데이터 + 코드)를 입력하면 대답하기가 훨씬 쉽습니다. – joran

+0

동의합니다. 불행히도 그러한 예제를 재현하는 데 필요한 코드가 실제 질문보다 더 많은 공간을 차지할 것 같았습니다. 내 희망은 누군가가 이론을 인식하고 그 문제에 대한 해결책을 전에 보았을 것입니다. –

+1

재현 가능한 예제가없는 질문은 이해할 수 없지만 두 번째 줄거리에서는 첫 번째 줄거리와 동일한 변수를 사용하여 '그룹'미학과 색상의 새로운 요소를 지정할 수 있습니다. – baptiste

답변

1

여기 하나의 방법입니다,하지만 난 당신이 아주 많이 좋아합니다 생각하지 않습니다 솔루션은 다른 종류의 데이터와 잘 작동하지 않습니다

d1 <- data.frame(x = 1:10, 
       y = rep(1:2,each = 5), 
       grp = factor(rep(letters[1:2],each = 5),levels = letters[1:3])) 
d1 <- rbind(d1,data.frame(x = 1:2,y = c(NA,NA),grp = c('c','c'))) 

d2 <- data.frame(x = 1:15, 
       y = rep(3:5,each = 5), 
       grp = rep(1:3,each = 5)) 

ggplot() + 
    geom_line(data = d1,aes(x = x,y = y,group = grp,colour = grp)) + 
    geom_line(data = d2,aes(x = x,y = y,group = grp),colour = "blue") 

enter image description here

참고. 범례에서 동일한 범주로 병합하려는 세 줄 각각은 기본적으로 동일한 지점에서 시작하고 끝납니다. 그렇지 않은 경우 원하지 않는 커넥터 라인이 생길 수 있습니다.

위의 방법은 더 일반적으로 작동하지만보기 드뭅니다. 뭔가가 있으면 더 불편합니다.

이런 종류의 문제가 여러 번 발생했으며, 더 간단한 해결책을 잊어 버릴 수 있습니다.그러나 일반적으로 ggplot2을 수동으로 모든 레전드를 작성하지 않아도된다는 점을 명심하십시오. 자주 사용되는 것은 아니지만 종종 기본 그래픽과 비교하여 약간의 유연성을 희생합니다.

+0

감사합니다. 나는 내 솔루션이 보편적으로 채택되어서는 안된다는 것을 처음으로 고백 할 것이다. 이것은 좋은 해결책입니다 - ggplot2에서 레이어에 대해 새로운 것을 알게되었지만 이상적이라고 생각합니다. 이 시나리오에서는'lines'을 사용하는 것이 더 나을 것 같지만 ggplot2를 사용하여 그래픽의 나머지 부분을 이미 포맷 했으므로이 시점에서 편의성보다 일관성을 유지할 것입니다. 다시 한번 감사드립니다. –

0

이 그래프를 그릴 때 직접 ROCR performance 개체의 항목을 data.frame에 넣었습니다. 중간급 데이터의 순서를 뒤집어서 오른쪽 상단에서 왼쪽 하단으로 이동을 줄일 수 있다는 것을 알고 있습니다. 즉

n1 <- getPerformance(test1) 
n2 <- getPerformance(test2) 
n3 <- getPerformance(test3) 

type x   y 
1 n1 0 0.000000000 
2 n1 0 0.003448276 
3 n1 0 0.006896552 
4 n1 0 0.010344828 
5 n1 0 0.013793103 
6 n1 0 0.017241379 
... 
26565 n1 0.9999619 1 
26566 n1 1.0000000 1 

여기서 문제처럼 보이는 세 개의 데이터 프레임을 만들 것입니다 내가 N2에 N1을 rbind 때, 나는 (N2의 포인트 (N1)의 점 (1,1)를 연결 할 것 0,0) - 대각선을 만듭니다.

필자의 경우, 하나의 (엉성한) 해결책은 모든 다른 라인의 순서를 반대로하여 대각선이 없도록하는 것이었다.

n2_rev <- n2[nrow(n2):1,] 
ns <- rbind(n1,n2_rev,n3) 

은 이제 라인이 아닌 시작의 앞뒤로 이동하고 다음 그래프 작성, 지속적으로 같은 위치에서 끝나는 : 그럼에도 불구하고

desired graph

을, 나는 더 보편적있다 가정 이것을 처리하는 방법. 기수 R에 대한 lines() 함수와 같은 ggplot2 그래프에 선을 추가하는 좋은 방법이 있습니까?

관련 문제