2016-10-14 3 views
3

위의 플롯의 모든 곡선이 내가 사용, arcdiagram 패키지 유사한 아크 플롯을 만들려고 노력하고 ggplot2의 geom_curve :geom_curve - 제로

library(ggplot2) 

ggplot(myDat, aes(x = A, xend = B, y = 0, yend = 0)) + 
    geom_curve(alpha = 0.2, curvature = 1, ncp = 1000, lineend = 'butt') 
일부 곡선이 0 이하로

enter image description here

, 내가 그들을 어떻게 만들 수 있습니다 모두가 Y = 0 이상으로 올라가는가?

데이터 :curvature을 바탕으로

myDat <- 
    structure(list(A = c(36047276L, 36074979L, 36074979L, 36074979L, 
         36074979L, 36074979L, 36074979L, 36074979L, 36074979L, 36074979L, 
         36074979L, 36077099L, 36077099L, 36077099L, 36077099L, 36077099L, 
         36077099L, 36077099L, 36077099L, 36098040L, 36098040L, 36098040L, 
         36098040L, 36098040L, 36098040L, 36098040L, 36098040L, 36098040L, 
         36098040L, 36098040L, 36098040L, 36098040L, 36098040L, 36098040L, 
         36098040L, 36098040L, 36099840L, 36099840L, 36099840L, 36099840L, 
         36099840L, 36099840L, 36099840L, 36099840L, 36099840L, 36099840L, 
         36099840L, 36099840L, 36099840L, 36099840L, 36099840L, 36099840L, 
         36099840L, 36101586L, 36101586L, 36101586L, 36101586L, 36101586L, 
         36101586L, 36101586L, 36101586L, 36101586L, 36101586L, 36101586L, 
         36101586L, 36101586L, 36101586L, 36101586L, 36101586L, 36101586L, 
         36103565L, 36103565L, 36103565L, 36103565L, 36103565L, 36103565L, 
         36103565L, 36103565L, 36103565L, 36103565L, 36103565L, 36103565L, 
         36103565L, 36103565L, 36103565L, 36103565L, 36103565L), 
       B = c(36047417L, 
         36077099L, 36077279L, 36077863L, 36078510L, 36079111L, 36079565L, 
         36080165L, 36080428L, 36082473L, 36082907L, 36074979L, 36077279L, 
         36077863L, 36078510L, 36079111L, 36079565L, 36080165L, 36082907L, 
         36096300L, 36097775L, 36098987L, 36099840L, 36099952L, 36100767L, 
         36101156L, 36101586L, 36101633L, 36101926L, 36102035L, 36102381L, 
         36102833L, 36103149L, 36103565L, 36103872L, 36104121L, 36096300L, 
         36097775L, 36098040L, 36098987L, 36099952L, 36100767L, 36101156L, 
         36101586L, 36101633L, 36101926L, 36102035L, 36102381L, 36102833L, 
         36103149L, 36103565L, 36103872L, 36104121L, 36096300L, 36097775L, 
         36098040L, 36098987L, 36099840L, 36099952L, 36100767L, 36101156L, 
         36101633L, 36101926L, 36102035L, 36102381L, 36102833L, 36103149L, 
         36103565L, 36103872L, 36104121L, 36096300L, 36097775L, 36098040L, 
         36098987L, 36099840L, 36099952L, 36100767L, 36101156L, 36101586L, 
         36101633L, 36101926L, 36102035L, 36102381L, 36102833L, 36103149L, 
         36103872L, 36104121L)), .Names = c("A", "B"), 
      class = "data.frame", row.names = c(NA, -87L)) 

답변

3

곡선 벤드 왼쪽 또는 오른쪽 중 어느 것. 이 경우 곡선이 A에서 B로 그려지며 곡률이 1이면 오른손 굽힘을 갖게된다는 것을 의미합니다. 따라서 A가 B보다 작 으면 곡선은 '음의'(y 축 아래)이고 A가 B보다 클 경우 양수가됩니다.

ggplot(mapping = aes(x = A, xend = B, y = 0, yend = 0)) + 
    geom_curve(data = subset(myDat, A > B), 
      alpha = 0.2, curvature = 1, ncp = 1000, lineend = 'butt') + 
    geom_curve(data = subset(myDat, A < B), 
      alpha = 0.2, curvature = -1, ncp = 1000, lineend = 'butt') 

또는, 우리는 그들이 잘못된 방향으로 정렬 될 때 주변의 쌍을 교체 할 수 있습니다 :

같은쪽에 모든 곡선을 얻을

한 가지 방법은 두 geom_curve의 각 상황에 하나입니다

myDat2 <- myDat 
myDat2$A <- pmax(myDat$A, myDat$B) 
myDat2$B <- pmin(myDat$A, myDat$B) 

ggplot(myDat2, aes(x = A, xend = B, y = 0, yend = 0)) + 
    geom_curve(alpha = 0.2, curvature = 1, ncp = 1000, lineend = 'butt') 

모두 결과에 :

enter image description here