使用ggmap在地图上绘制轮廓

时间:2014-12-21 22:02:00

标签: r contour ggmap utm

我对洛杉矶港区的颗粒物浓度差异(After - Before)。我正在尝试使用ggmap在地图上绘制浓度轮廓,但结果看起来有所不同。我使用的代码如下所示(数据在代码下面):

代码

install.packages( 'ggmap')

library(ggmap)

PM = read.csv('data.csv', stringsAsFactors = FALSE)

获取经度和纬度

geocode("Port of Los Angeles") # Not centered
geocode("Compton, CA") # Now centered

使用Compton LON和LAT

POLA = c(lon = -118.220071, lat =  33.895849)
POLA.map = get_map(location = POLA, zoom = 10, color = 'bw')
ggmap(POLA.map) + geom_point(data = PM, mapping = aes(Longitude, Latitude)) + 
        stat_density2d(data = PM, mapping = aes(x = Longitude, y = Latitude, fill=..level..), geom = "polygon", alpha = 0.3, contour = TRUE)

但是,等高线图应该有这样的模式:

https://drive.google.com/file/d/0B3XVjcsci0y3VDBTc01PYkhOckE/view?usp=sharing

ggplot(PM, aes(UTM.X, UTM.Y)) + geom_tile(aes(fill = Value), alpha = 0.8, color = "black") + 
        scale_fill_gradient(low = 'green', high = 'red')

数据:Col-1:经度,Col-2:纬度,Col-3:UTM-X,Col-4:UTM-Y,Col-5:值

UTM坐标单位:米,UTM区= 11 N,基准= WGS84。数据可在此处获取:https://drive.google.com/file/d/0B3XVjcsci0y3LUpudko1S2c1cnc/view?usp=sharing

1 个答案:

答案 0 :(得分:1)

stat_density2d用于绘制密度贴图,例如深色,其中有很多点和浅色,其中有少量。您有一个带有Value属性的常规网格,而不是密度图。

因此,您应该使用geom_tile来获取常规网格图。但是你的lat-long坐标不会形成轴对齐的网格。试试这个:

ggplot(data = PM, mapping = aes(x = Longitude, y = Latitude, fill=Value)) + geom_tile()

你得到一个空白的情节,试试这个:

ggplot(data = PM, mapping = aes(x = UTM.X, y = UTM.Y, fill=Value)) + geom_tile()

你得到了你的情节。当然它不在ggmap背景的相同坐标系中。

您可以使用基础R contourLines函数来获取UTM坐标中的等高线坐标,生成SpatialLinesDataFrame,然后转换为Lat-long并添加到{{ 1}}。

获得看起来像网格图的另一种可能性是使用带有正方形的点作为形状。

ggmap

fake grid

有一些人工制品,其中网格单元重叠,看起来有点像单元格轮廓,并且图例显示没有不透明度,因此看起来比单元格更饱和。您必须正确获取尺寸参数,因为它取决于图形设备的大小。

如果做不到这一点,请将数据转换为栅格包栅格对象,将其另存为GeoTIFF,并将其加载到QGIS中,QGIS可以动态地将UTM网格重新投影到Lat-long上。

QGIS还有一些很好的混合模式,所以你可以很容易地做到这一点:

raster in qgis

注意这不是透明度,这是乘法混合。透明度会导致深色被褪色,而乘法混合可让黑色显示,因此标签和基本地图细节仍然可见。

另外,请注意栅格不是轴对齐的(底部特别明显)。