必须绘制从远足/自行车路线的.gpx轨迹计算的高度计轮廓,我有正常的XY图,其中X是覆盖的渐进距离,Y是高度:
我也知道轨道的每个部分的表面(沥青,地面,鹅卵石......),所以我的data.table TRACKS的形式如下:
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
… … …
我想用这些信息丰富图表, 获得这样的东西:
我尝试使用gep = c(“area”,“line”)和qplot,geom =“ribbon”来自ggplot2,但我对这些包的实际知识还不够,所以欢迎任何帮助!< / p>
答案 0 :(得分: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)
但是,请注意您的数据中需要添加额外的一行来实现此图表,否则您将在图表中出现间隙。检查上面的评论。
希望它有所帮助。
答案 1 :(得分: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()