更改stat_density2d的单位

时间:2015-08-10 18:56:17

标签: r ggplot2 ggmap

我使用ggmap和stat_density2d在R中制作密度贴图。代码如下所示:

riverside <- get_map('Riverside, IL', zoom = 14 , color = 'bw' ) 
RiversideMap <- ggmap(riverside, extent = 'device', legend = 'topleft')

# make the map: 
RiversideMap +  
stat_density2d(aes(x = lon, y = lat,
fill = ..level.. , alpha = ..level..),size = .01, bins = 16,
data = myData, geom = 'polygon') + 
scale_fill_gradient(low = "yellow", high = "blue") +  
scale_alpha(range = c(.0, 0.3), guide = FALSE)

地图颜色图例中显示的密度在stat_density2d中通过要求密度超过面积的积分等于1来标准化。

在地图中,x和y轴的单位是十进制度。 (例如,点由坐标lat = 41.81888和lon = -87.84147指定)。

为便于解释,请对地图图例中显示的密度值进行两处更改。

首先,我希望密度的积分为N(数据集中的数据点数 - 或地址数)而不是1.因此图例中显示的值需要乘以N = nrow(myData)。

其次,我希望距离单位为公里而不是十进制度。对于我正在绘制的纬度和经度,这需要将图例中显示的值除以9203.

使用stat_density2d中密度的默认标准化,我在图例中得到这些数字:c(2000,1500,1000,500)。

取N = 1600并执行上述重新缩放,这变为c(348,261,174,87)(= 1600/9203 * 2000等)。显然,这些不是很好的圆形数字,所以如果传说数字是c(400,300,200,100)并且它们在图例颜色条中的位置相应调整则会更好。

进行这些重新缩放的优势在于地图中的密度变得易于解释:它只是每平方公里的人数(而不是每平方度人的概率密度)。

有一种简单的方法吗?我是ggmap和ggplot2的新手。提前致谢。

1 个答案:

答案 0 :(得分:1)

简而言之,使用:

scale_fill_continuous(labels = scales::unit_format(unit = "k", scale = 1e-3))

此链接对管理比例尺,轴和标签非常有用:https://ggplot2-book.org/scales.html