在 geom_tile 不工作的情况下在 ggmap 上绘制矩阵
Plotting a matrix on ggmap with geom_tile not working
我正在尝试在 ggmap 图上用 longitude/latitude 坐标绘制一个矩阵(主要是随机数和一些 NA)。
这是我的代码:
library(ggmap)
library(ggplot2)
定义经纬度坐标
x1=34.2
x2=42.4
y1=37.4
y2=29.4
lon = seq(x1,x2,by=0.1)
lat = seq(y1,y2,by=-0.1)
用longitude/latitude维度的随机数定义一个矩阵
set.seed(1)
numbers = rnorm(length(lon)*length(lat))
var = matrix(numbers,length(lon),length(lat))
向矩阵添加一些 NA
var[1:5,1:5] = NA
lat_min <- min(lat)-0.3
lon_min <- min(lon)-0.3
lat_max <- max(lat)+0.3
lon_max <- max(lon)+0.3
构建 ggmap
map_box <- c(left=lon_min,bottom=lat_min,
right=lon_max,top=lat_max)
total_stmap <- get_stamenmap(bbox=map_box,zoom=5,maptype="toner")
total_ggmap <- ggmap(total_stmap,extent="panel")
制作一个data.frame将每个矩阵索引归于地理坐标
lat_df <- c()
lon_df <- c()
var_df <- c()
for (i in 1:length(lon)) {
for (j in 1:length(lat)) {
lon_df <- c(lon_df,lon[i])
lat_df <- c(lat_df,lat[j])
var_df = var[i,j]
}
}
df=data.frame(Longitude=lon_df,Latitude=lat_df,Variable=var_df)
使用 ggmap 和 geom_tile
制作绘图
plot = total_ggmap +
geom_tile(data=df,aes(x=Longitude,y=Latitude,fill=Variable),alpha=1/2,color="black",size=0) +
geom_sf(data = df, inherit.aes = FALSE, fill = NA)
使用此代码我收到消息:
Coordinate system already present. Adding new coordinate system, which will replace the existing one.
...和空白图。
这里有两个问题。首先是 Variable
列中的所有值都是相同的,因为您只是在循环的每次迭代中覆盖 var_df
。行
var_df = var[i,j]
应该是
var_df = c(var_df, var[i,j])
其次,如果您有经度、纬度和值的数据框,则不应使用 geom_sf
。 geom_sf
用来绘制 sf
个对象,这不是你有的
相反,您只需要做:
plot <- total_ggmap +
geom_tile(data = df, aes(Longitude, Latitude, fill = Variable), alpha = 1/2, size = 0)
你得到:
plot
我正在尝试在 ggmap 图上用 longitude/latitude 坐标绘制一个矩阵(主要是随机数和一些 NA)。
这是我的代码:
library(ggmap)
library(ggplot2)
定义经纬度坐标
x1=34.2
x2=42.4
y1=37.4
y2=29.4
lon = seq(x1,x2,by=0.1)
lat = seq(y1,y2,by=-0.1)
用longitude/latitude维度的随机数定义一个矩阵
set.seed(1)
numbers = rnorm(length(lon)*length(lat))
var = matrix(numbers,length(lon),length(lat))
向矩阵添加一些 NA
var[1:5,1:5] = NA
lat_min <- min(lat)-0.3
lon_min <- min(lon)-0.3
lat_max <- max(lat)+0.3
lon_max <- max(lon)+0.3
构建 ggmap
map_box <- c(left=lon_min,bottom=lat_min,
right=lon_max,top=lat_max)
total_stmap <- get_stamenmap(bbox=map_box,zoom=5,maptype="toner")
total_ggmap <- ggmap(total_stmap,extent="panel")
制作一个data.frame将每个矩阵索引归于地理坐标
lat_df <- c()
lon_df <- c()
var_df <- c()
for (i in 1:length(lon)) {
for (j in 1:length(lat)) {
lon_df <- c(lon_df,lon[i])
lat_df <- c(lat_df,lat[j])
var_df = var[i,j]
}
}
df=data.frame(Longitude=lon_df,Latitude=lat_df,Variable=var_df)
使用 ggmap 和 geom_tile
制作绘图plot = total_ggmap +
geom_tile(data=df,aes(x=Longitude,y=Latitude,fill=Variable),alpha=1/2,color="black",size=0) +
geom_sf(data = df, inherit.aes = FALSE, fill = NA)
使用此代码我收到消息:
Coordinate system already present. Adding new coordinate system, which will replace the existing one.
...和空白图。
这里有两个问题。首先是 Variable
列中的所有值都是相同的,因为您只是在循环的每次迭代中覆盖 var_df
。行
var_df = var[i,j]
应该是
var_df = c(var_df, var[i,j])
其次,如果您有经度、纬度和值的数据框,则不应使用 geom_sf
。 geom_sf
用来绘制 sf
个对象,这不是你有的
相反,您只需要做:
plot <- total_ggmap +
geom_tile(data = df, aes(Longitude, Latitude, fill = Variable), alpha = 1/2, size = 0)
你得到:
plot