在此博客文章中,我提供了R中的编码示例,该示例说明了如何使用deckgl包创建基于地图的散点图。当可视化具有某些空间方面的数据时,这可能会派上用场。例如,您可能希望可视化某些属性集群的地理空间分布。
在应用deckgl软件包的功能之前,我需要一个经过地理编码的数据集,即一个包含有关感兴趣属性的经度和纬度坐标信息的数据集。为此,我将使用应用Open Street Map API的地理编码功能。我在datascienceplus.com上找到了该功能。
# 地理编码功能
# source: https://datascienceplus.com/osm-nominatim-with-r-getting-locations-geo-coordinates-by-its-address/
osm_geocoder <- function(address = NULL)
{
if(suppressWarnings(is.null(address)))
return(data.frame())
tryCatch(
d <- jsonlite::fromJSON(
gsub('\\@addr\\@', gsub('\\s+', '\\%20', address),
'http://nominatim.openstreetmap.org/search/@addr@?format=json&addressdetails=0&limit=1')
), error = function(c) return(data.frame())
)
if(length(d) == 0)
return(data.frame())
return(data.frame(lon = as.numeric(d$lon), lat = as.numeric(d$lat)))
}
接下来,我需要初始化要绘制的数据。我将城市列表存储在单独的csv文件中。因此,我读取了此文件并将其转换为数据帧。然后,我使用地理编码功能对数据框中的所有城市进行地理编码。另外,我在“条目”和“退出”列中添加了正态分布的值;确定例如散点图中的圆形设计。
# 确保已加载所需的软件包
library(deckgl)
library(magrittr)
library(jsonlite)
library(dplyr)
# 设置数据框
scatter_data_df_1 <- data.frame(matrix(nrow=30,ncol=6))
column_names <- c("name","code","address","entries","exits","coordinates")
colnames(scatter_data_df_1) <- column_names
city_list_1_df <- read.csv("city list 1.csv",header = FALSE, stringsAsFactors = FALSE)
# 将城市地理编码为经度和纬度
for(i in 1:nrow(city_list_1_df)){
dum_coord <- osm_geocoder(toString(city_list_1_df$V1[i]))
scatter_data_df_1$name[i] <- paste0("city liste 1 : ",i)
scatter_data_df_1$code[i] <- c("CL1")
scatter_data_df_1$address[i] <- toString(city_list_1_df$V1[i])
scatter_data_df_1$entries[i] <- as.integer(rnorm(1,mean=3000,sd=1000))
scatter_data_df_1$exits[i] <- as.integer(rnorm(1,mean=3000,1000))
scatter_data_df_1$coordinates[i] <- list(c(as.numeric(dum_coord[1]),as.numeric(dum_coord[2])))
}
# scatter_data_df_1的打印头
head(scatter_data_df_1)
## name code address entries exits
## 1 city liste 1 : 1 CL1 Berlin Germany 5008 3112
## 2 city liste 1 : 2 CL1 Karlsruhe Germany 2002 2223
## 3 city liste 1 : 3 CL1 Stuttgart Germany 3453 3498
## 4 city liste 1 : 4 CL1 Mannheim Germany 2478 3041
## 5 city liste 1 : 5 CL1 Heidelberg Germany 3811 1003
## 6 city liste 1 : 6 CL1 Frankfurt Germany 1875 3135
## coordinates
## 1 13.38886, 52.51704
## 2 8.40342, 49.00687
## 3 9.180013, 48.778449
## 4 8.467236, 49.489591
## 5 8.694724, 49.409358
## 6 8.682092, 50.110644
现在,我可以使用deckgl R包中的deckgl函数创建散点图。
# 定义图的属性
properties_1 <- list(
getPosition = get_property("coordinates"),
getRadius = JS("data => Math.sqrt(data.exits)"),
radiusScale = 1000,
getColor = c(255, 153, 77)
)
# 散点图
deckgl(zoom = 10.5, pitch = 35, longitude = 8.40342, latitude = 40.00687) %>%
add_scatterplot_layer(data = scatter_data_df_1, properties = properties_1) %>%
add_mapbox_basemap(style = "mapbox://styles/linnartsf/cjq6p9q8f8zwf2rp74qf2o3d5")
我们最终得到以下散点图:
请随时查看我在R中有关空间数据分析和空间数据可视化的其他文章。
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply