你能解释下面的R代码吗?

时间:2018-08-28 13:08:16

标签: r

您能解释一下此代码吗?

x1和x2的用途是什么

我想从此代码创建轮廓。

请解释interp()的用法。

此代码对绘制轮廓有何帮助?

我们有一个文本文件,其中有三个独立的经度长的列。要使用interp()吗?

f=read.table("data2_input.txt",sep="\t",header=T)
attach(f)
library(akima)
library(reshape2)
c1=length(f[1,])
r1=length(f[,1])
lat=0,long=0,conc=0,x1=0 y1=0 midx=0 x2=0 y2=0 midy=0 
conc=0 r=r1                            
c=c1
lat=f[,1]
long=f[,2]
conc=f[,3]
ak=interp(long,lat,conc, xo=seq(min(long),max(long),length=200),yo=seq(min(lat),max(lat),length=75))
mak=melt(ak$z)
names(mak)=c('x','y','value')
mak$lon=ak$x[mak$x]
mak$lat=ak$y[mak$y]
lon_diff=round(ak$x[2]-ak$x[1],5)
lat_diff=round(ak$y[2]-ak$y[1],5)
mak1=mak[,3:5]
mak1=subset(mak1,mak1$value!='NA')
names(mak1)=c('Concentration','Longitude','Latitude')

/* why use x1 and x2*/
x1=round(mak1$Latitude-lat_diff/2,4)
y1=round(mak1$Longitude-lon_diff/2,4)
x2=round(mak1$Latitude+lat_diff/2,4)
y2=round(mak1$Longitude+lon_diff/2,4)
/*why use round function*/          
z1=as.data.frame(cbind(x1,y1,x2,y2,round(mak1$Latitude,4),round(mak1$Longitude,4),round(mak1$Concentration,4)))
names(z1)=c('latitude_x1','longitude_y1','latitude_x2','longitude_y2','midx','midy','dvalue')
write.csv(z1,'data2_output.csv',row.names=F,quote=F)

1 个答案:

答案 0 :(得分:0)

欢迎您使用Stack Overflow,并感谢您的提问(但是发布的评论仍然有用:)

  • x1,y1和x2,y2是要制作的矩形的右下角和左上角顶点的坐标矢量;
  • 您关于浓度的空间数据不规则地分布在表面上,因此,如果能够绘制它,则会在地图上看到很多空白,不连续和不规则。您的轮廓和基础图像将不可读且变形。
  • 为避免这种情况,您应该插值数据(或将数据放在常规网格上),因此这就是为什么需要使用interp包的akima函数的原因。
  • 不进行插值/平滑处理的极端示例(但是对于ggplot2包来说),您可以在Contour Plot is not Completly Filled上看到
  • base本身不可能针对不规则数据调用countour图,因为应提供规则分布的z值矩阵作为参数。