2014-12-03 4 views
1

하이킹/자전거 경로의 .gpx 트랙에서 계산 된 고도계 프로필을 플로팅해야합니다. 정상적인 XY 그래프가 있습니다. 여기에서 X는 점진적 거리이며 Y는 고도입니다.
XY 그래프 : x- 범위에 다른 색 사용

PROGDIST ALTITUDE SURFACE 
     50  110 asphalt 
    100  123 asphalt 
    150  146 asphalt 
    200  124 asphalt 
    250  141 asphalt 
    300  141 asphalt 
    350  148 ground 
    400  118 ground 
    450  120 ground 
     …   …  … 

내가 좋아하는 것 :
가 나는 또한 트랙 (아스팔트, 땅, 조약돌, ...)의 각 세그먼트의 표면을 알고, 나의 data.table TRACKS의 형식은 이 정보로 그래프를 풍부하게하려면 과 같은 것을 얻는 것 :

gplot2에서 geom = c ("area", "line") 및 geom = "ribbon"을 사용하려고했지만 실제 지식이 부족하여 도움이 될 것입니다.

답변

1

데이터를 사용이 당신이 그것을 할 수있는 한 가지 방법은 다음과 같습니다

df <- read.table(header=T,text=" 
PROGDIST ALTITUDE SURFACE 
50  110 asphalt 
100  123 asphalt 
150  146 asphalt 
200  124 asphalt 
250  141 asphalt 
300  141 asphalt 
350  148 asphalt #you need to add this line in your data so that the colouring goes up to 350 and not stop at 300. #remove this comment to run read.table() 
350  148 ground 
400  118 ground 
450  120 ground") 

ggplot(aes(x=PROGDIST,y=ALTITUDE) , data=df) + geom_line() + 
    geom_ribbon(data=subset(df, SURFACE=='asphalt') , aes(ymax=ALTITUDE) ,ymin=0, fill='red', colour=NA, alpha=0.5) + 
    geom_ribbon(data=subset(df, SURFACE=='ground') , aes(ymax=ALTITUDE) ,ymin=0, fill='blue', colour=NA, alpha=0.5) 

enter image description here

그러나이 그래프를 달성하기 위해 여분의 줄을 추가해야 할 데이터의 메모, 그렇지 않으면 당신은 것입니다 음모에 틈이있다. 위의 설명을 확인하십시오.

희망이 있습니다.

+0

대단히 감사합니다. Lyzande! 또한 테이블에 그 라인을 추가하지 않아도됩니다. :-) (광산은 단순한 예 였지만 GPS 트랙을 등록하는 동안 일시 중지/다시 시작하여 여러 세그먼트로 나누었을 때 중단 점이 두 번 등록되었습니다 : 이전 세그먼트의 마지막 점 및 새 세그먼트의 첫 번째 점으로) – mbranco

1

fill 옵션을 사용하면 쉽게 ggplot에이를 수행 할 수 있습니다. 하지만 먼저 변경점을 고유하게 만들기 위해 데이터를 변경해야합니다.

# original data 
df <- read.table(text = 'PROGDIST ALTITUDE SURFACE 
     50  110 asphalt 
    100  123 asphalt 
    150  146 asphalt 
    200  124 asphalt 
    250  141 asphalt 
    300  141 asphalt 
    350  148 ground 
    400  118 ground 
    450  120 ground', header=TRUE) 
# find points where SURFACE changes 
df.change <- df[diff(as.numeric(df$SURFACE)) > 0, ] 
df.change$SURFACE <- df[c(0, diff(as.numeric(df$SURFACE))) > 0, "SURFACE"] 
# add points with new surface to plot 
df.new <- rbind(df, df.change) 
df.new <- df.new[order(df.new$PROGDIST), ] 
# plot 
ggplot(df.new, aes(PROGDIST, ALTITUDE)) + 
    geom_line() + 
    geom_ribbon(aes(ymin=0, ymax=ALTITUDE, fill=SURFACE)) + 
    theme_bw() 
+0

감사합니다. 그림자도 있습니다. 조금 더 계산이있는 것으로 보이더라도 솔루션을 사용해보고 싶습니다. – mbranco