我有这样的数据集:https://www.dropbox.com/s/k06n9l05t25r6x2/newdata.csv?dl=0
(样本)
"","row","col","flagrv"
"1",2361,530,2
"2",2378,531,2
"3",2360,531,2
"4",2355,531,2
"5",2363,532,2
"6",2359,532,2
"7",2368,533,2
"8",2367,533,2
"10",2359,533,2
如果我用这段代码作图:
gs.pal <- colorRampPalette(c("blue", "green","yellow","orange","red"),bias=1,space="rgb")
ggplot(data=ndata,aes(x=col,y=row,color=flagrv)) +
geom_point(size = 0.01)+
scale_colour_gradientn(name = "Scale",colours = gs.pal(5))+
xlab('Longitude')+
ylab('Latitude')+
theme_bw()+
theme(line = element_blank())+
theme(legend.position = c(.93,.20),panel.grid.major = element_line(colour = "#854440"))+
ggsave("test.png",width=10, height=8,dpi=300)
我们得到这个数字:
现在,问题是我没有长时间的价值观。我想覆盖州边界,但不能使用地图包。有人建议我用gdal,但我不知道怎么用。请您告诉我,我如何可以映射到拉特-朗域,以便我可以轻松地操作它。
编辑:
我从别人那里学到了我可以用这个:
gdal_translate -a_srs EPSG:4269 FILE.asc FILE.tif
答案错误1
Error: unexpected ']' in "spdf = SpatialPointsDataFrame(coords, all_data[, c("flagrv"]"
然后,我将代码更改为:
spdf = SpatialPointsDataFrame(coords, all_data[, c("flagrv")])
但是现在我有了一个错误:
Error in validObject(.Object) : invalid class “SpatialPointsDataFrame” object: invalid object for slot "data" in class "SpatialPointsDataFrame": got class "integer", should be or extend class "data.frame"
发布于 2015-05-26 16:37:08
如果至少不知道数据集的投影和数据(但希望有更多的信息,如分辨率和范围),就没有简单的方法可以做到这一点。如果这是一个派生映射,请尝试查找用于生成它的内容。有了这些信息,您就可以使用光栅包中的投影函数来定义数据集的投影。
编辑(根据提供的附加信息,有一个工作解决方案):这是一个工作解决方案,因为数据集的左下角有一个24.55,-130坐标,行/集之间的间距是0.01度,投影是nad83。请注意,提供的元数据信息是错误的,因为最小lat值不是20度,但可以从最南端(关键西部)估计为24.55。
#load dataset
all_data=(read.csv('new_data.csv',header=T, stringsAsFactors=F))
res=0.01 #spacing of row and col coords pre-specified
#origin_col_row=c(0, 0)
origin_lat_lon=c(24.55, -130)
all_data$row=(all_data$row)*res+origin_lat_lon[1]
all_data$col=(all_data$col)*res+origin_lat_lon[2]
#now that we have real lat/lon, we can just create a spatial dataframe
library(rgdal)
library(sp)
coords = cbind(all_data$col, all_data$row)
spdf = SpatialPointsDataFrame(coords, data=all_data) #sp = SpatialPoints(coords)
proj4string(spdf) <- CRS("+init=epsg:4269")
R似乎无法绘制出这么多点,因此为了检查答案是否合理,我将数据集保存为一个shapefile,并将其绘制在arcgis上:
writeOGR(spdf,"D:/tmp_shapefile4.shp", "flagrv", driver="ESRI Shapefile")
我成功地用下面的代码使用ggplot2绘制了它,只是耐心点,因为绘制它需要一段时间:
df=as.data.frame(spdf)
library(ggplot2)
ggplot(data=df,aes(x=col,y=row,color=flagrv))+
geom_point(size = 0.01)+
xlab('Longitude')+
ylab('Latitude')
https://stackoverflow.com/questions/30470895
复制相似问题