簡體   English   中英

XY中的XYZ數據到2D圖

[英]XYZ data to 2D plot in R

我需要制作一個距離行程的2D曲線圖與該點的值(“強度”)。

我的數據格式為:

lon lat intensity

 1. -85.01478 37.99030  -68.3167
 2. -85.00752 37.97601  -68.0247
 3. -85.00027 37.96172  -67.9565
 4. -84.99302 37.94743  -67.8917

它繼續像這樣282行。 我正在查看一些計算經度(lon)和緯度(lat)點(例如geosphere)之間距離的軟件包,但我無法理解如何將我的數據轉換為它想要的格式。 我知道以度為單位的總行進距離應該是4.01538,在282點之間均勻分布,但我不知道如何在R中制作一個列。

dfrm$dist<- cumsum(c(0, with(dfrm, sqrt( (lat[-1]-lat[-nrow(dfrm)])^2+
                                   (lon[-1]-lon[-nrow(dfrm)])^2
                               )))  )
with(dfrm, plot(dist, intensity, type="b"))

在此輸入圖像描述

或者使用滯后列值選擇更“地理”的距離度量。 但考慮到增量,我懷疑使用天真距離測量的誤差可能是那么多。

這里我發現了一些包來計算坐標之間的距離。 假設您的數據被稱為dtf並使用RSEIS包:

dtf <- data.frame(rbind(c(-85.01478,37.99030,-68.3167),
c(-85.00752,37.97601,-68.0247),c(-85.00027,37.96172,-67.9565),
c(-84.99302,37.94743,-67.8917)))
names(dtf) <- c('lon','lat','int')

library(RSEIS)
travelint <- function(i,data){
ddeg <- GreatDist(dtf$lon[i],dtf$lat[i],dtf$lon[i+1],dtf$lat[i+1])$ddeg;
dint <- dtf$int[i+1] - dtf$int[i]; return(list(ddeg,dint))}
out <- sapply(1:(nrow(dtf)-1),data=dtf,travelint)
out <- data.frame(matrix(as.numeric(out),ncol=2,byrow=T))
out$X1 <- cumsum(out$X1)

這將獲取您的數據,計算點之間的行進距離以及它們之間的強度變化。 之后可以像這樣繪制:

ggplot(out,aes(X1,X2)) + geom_line() + 
      labs(x="Distance (Degrees)",y="Intensity Change")

在此輸入圖像描述

如果你想要增加強度,你可以再次使用cumsum來獲得強度的累積變化,然后將其添加到第一個強度:

out2 <- out
out2 <- rbind(c(0,0),out2)
out2$X2 <- cumsum(out2$X2) + dtf$int[1]
ggplot(out2,aes(X1,X2)) + geom_line() + 
      labs(x="Distance (Degrees)",y="Intensity")

在此輸入圖像描述

如DWin所述,您可以使用天真測量或地理距離測量。 這里我使用來自Imap包的gdist函數計算大圓距離。

library(Imap)
library(lattice)
#Dummy data
longlat <- read.table(text="lon lat intensity
 1. -85.01478 37.99030  -68.3167
 2. -85.00752 37.97601  -68.0247
 3. -85.00027 37.96172  -67.9565
 4. -84.99302 37.94743  -67.8917", header=TRUE)

ll <- lapply(seq(nrow(longlat)-1), function(x){
    start <- longlat[x,]
    end   <- longlat[x+1,]
    cbind(distance = gdist(start$lon, start$lat, end$lon, end$lat,units = "m"),
          intensity = end$intensity - start$intensity)
  })
dd <- as.data.frame(do.call(rbind,ll))
library(lattice)
xyplot(intensity~distance,dd,type= c('p','l'),pch=20,cex=2)

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM