我有一个功能,我只想绘制x
和y
。 z
应表示为颜色。是否有适合我的工作包?
f = function(a,b){
dnorm(a^2+b^2)
}
x = seq(-2, 2, 0.1)
y = seq(-2, 2, 0.1)
z = outer(x, y, f)
persp(x, y, z)
我想在使用rGoogleMaps
生成的地图上绘制此函数。也许有更具体的包用于此用途?
答案 0 :(得分:3)
这样的东西?
library(ggmap) # loads ggplot2 as well
library(RgoogleMaps) # for getGeoCode
london.center <- getGeoCode("London")
london <- get_map("London", zoom=12)
x <- seq(-2,2,0.1)
df <- expand.grid(x=x,y=x)
df$z <- with(df,f(x,y))
df$x <- london.center[2]+df$x/20
df$y <- london.center[1]+df$y/20
ggp <- ggmap(london)+
geom_tile(data=df,aes(x=x,y=y,fill=z), alpha=0.2)+
scale_fill_gradientn(guide="none",colours=rev(heat.colors(10)))+
stat_contour(data=df, aes(x=x, y=y, z=z, color=..level..), geom="path", size=1)+
scale_color_gradientn(colours=rev(heat.colors(10)))
plot(ggp)
此解决方案使用ggplot
。也许其他人会使用RgoogleMaps
向您展示如何执行此操作。
基本上,我们使用get_map(...)
(这只是GetMap(...)
包中RgoogleMaps
的包装器)加载地图。
然后我们创建示例数据框df
,其中包含三列x
,y
和z
,以及x和y的每个组合的一行(这是ggplot所需的格式)。
然后我们创建地图图层。首先是地图本身,使用ggmap(...)
;然后使用geom_tile(...)
基于z的值“填充”一层图块;然后使用stat_contour(geom="path",...)
使用z的值着色的一组轮廓线。其余代码设置填充和线条颜色并渲染地图。
纯粹主义者会告诉您,您可以使用stat_contour(geom="polygon",...)
直接渲染填充的轮廓,而不是使用平铺,但这会导致剪切未完全包含在绘图区域中的任何轮廓的不幸影响。