我对ggplot比较新,所以如果我的一些问题非常简单或根本无法解决,请原谅我.
我想要做的是生成一个国家的"热图",其中形状的填充是连续的.此外,我有国家的形状.RData.我使用hadley wickham的脚本将我的SpatialPolygon数据转换为数据框.我数据框的long和lat数据现在看起来像这样
head(my_df)
long lat group
6.527187 51.87055 0.1
6.531768 51.87206 0.1
6.541202 51.87656 0.1
6.553331 51.88271 0.1
Run Code Online (Sandbox Code Playgroud)
这个长/拉数据描绘了德国的轮廓.这里省略了数据框的其余部分,因为我认为不需要它.对于某些长/纬度点,我还有第二个数据帧.这看起来像这样
my_fixed_points
long lat value
12.817 48.917 0.04
8.533 52.017 0.034
8.683 50.117 0.02
7.217 49.483 0.0542
Run Code Online (Sandbox Code Playgroud)
我现在想做的是,根据位于该点一定距离内的所有固定点的平均值,为地图的每个点着色.这样我就可以得到整个国家地图的(几乎)连续着色.到目前为止我所拥有的是用ggplot2绘制的国家地图
ggplot(my_df,aes(long,lat)) + geom_polygon(aes(group=group), fill="white") +
geom_path(color="white",aes(group=group)) + coord_equal()
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是生成位于已绘制的地图内的点,然后计算每个生成点的值,my_generated_point如此
value_vector <- subset(my_fixed_points,
spDistsN1(cbind(my_fixed_points$long, my_fixed_points$lat),
c(my_generated_point$long, my_generated_point$lat), longlat=TRUE) < 50,
select = value)
point_value <- mean(value_vector)
Run Code Online (Sandbox Code Playgroud)
我还没有找到一种方法来产生这些点.就像整个问题一样,我甚至不知道是否有可能以这种方式解决.我现在的问题是,是否存在生成这些点的方法和/或是否有另一种方法来解决问题.
解
感谢Paul,我几乎得到了我想要的东西.以下是荷兰样本数据的示例.
library(ggplot2)
library(sp)
library(automap)
library(rgdal)
library(scales)
#get the spatial data …Run Code Online (Sandbox Code Playgroud) 我想将一个shapefile(将.shp和相关文件在这里)子集化为另一个由一组坐标限定的,例如在long [80,90]和lats [20,30]之间,然后将其写为另一个shape文件.如果我使用maptools包裹:
df = readShapeLines("/path/asia_rivers.shp")
然后看看文件的结构as.data.frame(df),我找不到任何明显的坐标子集方式.我可以使用PBSmapping包来分组:
df = importShapefile("/path/asia_rivers.shp")
df_sub = subset(df, X>=80 & X<=90 & Y >=20 & Y <=30)
Run Code Online (Sandbox Code Playgroud)
但我不能似乎能够强制成这样SpatialLines,其可通过以下方式导出的数据帧writeSpatialShape()在maptools.我一直收到这个错误:Error in PolySet2SpatialLines(df_sub) : unknown coordinate reference system.当然,我遗漏了一些非常基本的东西,应该有一种通过地理坐标对地理数据进行分类的简单方法?