R语言地图可视化:基于REmap包

一、获取经纬度坐标函数
1、get_city_coord():获得城市的位置信息
2、get_geo_position():获得城市向量的位置信息

二、地图函数
1、热力图:remapH()

remapH(data, 
      maptype = 'china',
      theme = get_theme("Dark"),
      blurSize = 30,
      color = c('blue', 'cyan', 'lime', 'yellow', 'red'),
      minAlpha = 0.05,
      opacity = 1,
      ...)

参数解释

data:数据框,包括经度、纬度、密度
maptype:地图的类型,如'china'、'world'以及中国的省份
theme:主题,控制地图的颜色
blurSize:热力效果范围,默认30
color:热力图的渐变颜色
minAlpha:如果密度值小雨最小alpha,热力图会把这个密度设为最小alpha,从而确保密度小的点在地图上也能够看出来
opacity:热力图的不透明度,默认值为1

2、方位图或迁徙图:remapB()

remapB(center = c(104.114129,37.550339),
       zoom = 5,
       color = "Bright",
       title = "",
       subtitle = "",
       markLineData = NA,
       markPointData = NA,
       markLineTheme = markLineControl(),
       markPointTheme = markPointControl(),
       geoData = NA)

参数解释

center:地图的中心位置
zoom:地图的大小,
color:地图的颜色
title:地图标题
subtitle:次标题
markLineData:绘制迁徙图时用此函数
markPointData:绘制方位图时用此函数

3、填充地图:remarkC()

remapC(data,
       maptype = 'china',
      markLineData = NULL,
      markPointData = NULL,
      color = c('#1e90ff','#f0ffff'),
      theme = get_theme("Bright"),
      title = "",
      subtitle = "",
      markLineTheme = markLineControl(),
      markPointTheme = markPointControl(),
      geoData = NA,
      mindata = NA,
      maxdata = NA)

参数解释

data:数据框,包括位置名和对应的值
maptype:'china'、'world'、或中国的省份
markLineData:data for mark line
markPointData:data for mark point
color:vector of the color, if the length of color is 1, white will be added to the color.

三、可视化案例
案例A、remapH()函数绘制热力图

1、生成城市名单

library(REmap)
cities <- mapNames('zhejiang')
cities
[1] "丽水市" "杭州市" "温州市" "宁波市" "舟山市"
[6] "台州市" "金华市" "衢州市" "绍兴市" "嘉兴市"
[11] "湖州市"

2、获取城市经纬度

city_Geo <- get_geo_position(cities)
city_Geo
        lon      lat   city
1  119.9296 28.47328 丽水市
2  120.2155 30.25308 杭州市
3  120.7065 28.00109 温州市
4  121.6286 29.86603 宁波市
5  122.2136 29.99091 舟山市
6  121.4274 28.66219 台州市
7  119.6534 29.08464 金华市
8  118.8666 28.97555 衢州市
9  120.5855 30.03637 绍兴市
10 120.7635 30.75097 嘉兴市
11 120.0945 30.89896 湖州市

生成一系列密度

percent <- runif(11, min = 0.25, max = 0.9)
percent
[1] 0.5792101 0.5989498 0.4184216 0.7719849
[5] 0.7556479 0.6388627 0.6520455 0.5641716
[9] 0.4279690 0.8441732 0.6033032

合并成绘图数据

data_all <- data.frame(city_Geo[, 1:2], percent)
data_all
        lon      lat   percent
1  119.9296 28.47328 0.5792101
2  120.2155 30.25308 0.5989498
3  120.7065 28.00109 0.4184216
4  121.6286 29.86603 0.7719849
5  122.2136 29.99091 0.7556479
6  121.4274 28.66219 0.6388627
7  119.6534 29.08464 0.6520455
8  118.8666 28.97555 0.5641716
9  120.5855 30.03637 0.4279690
10 120.7635 30.75097 0.8441732
11 120.0945 30.89896 0.6033032

3、绘制热力图

result <- remapH(data_all,
                            maptype = '浙江',
                            theme = get_theme('Dark'),
                            blurSize = 35,
                            color = 'red',
                            minAlpha = 10,
                            opacity = 1)

4、绘制出来的地图如下(经纬度坐标好像不太精确):
在这里插入图片描述

案例B、remapB()函数绘制方位图

1、获取目标大学名单

university <- c('浙江财经大学', '浙江工商大学', '浙江理工大学', '杭州电子科技大学')

2、获取目标大学经纬度

uni_geo <- get_geo_position(university)
uni_geo
       lon      lat             city
1 120.1620 30.32866 浙江大学城市学院
2 120.3962 30.31544     浙江工商大学
3 120.0933 30.30869         浙江大学
4 120.3495 30.32055 杭州电子科技大学

3、绘制方位图

uni_result <- remapB(markPointData = data.frame(uni_geo$city),
					 markPointTheme = markPointControl(symbol = 'circle',
					                                   effect = T,
					                                   symbolSize = 12,
					                                   color = 'red'),
					 geoData = uni_geo
)

4、绘制出来的地图效果如下(动态):
在这里插入图片描述
案例C、remapB()函数绘制连线图

1、假设目标城市、获取经纬度信息

location <- c('杭州市','温州市','丽水市')
loc_geo <- get_geo_position(location)
loc_geo
       lon      lat   city
1 120.2155 30.25308 杭州市
2 120.7065 28.00109 温州市
3 119.9296 28.47328 丽水市

2、构造起始点信息

start_point <- location[2:3]
terminal_point <- location[c(3,1)]
data_DF <- data.frame(start_point, terminal_point)
data_DF
  start_point terminal_point
1      温州市         丽水市
2      丽水市         杭州市

3、绘制地图

loc_result <- remapB(
	center = get_city_coord('杭州市'),
	color = 'midnight',
	markLineData = data_DF,
	markLineTheme = markLineControl(effect = T, 
									smoothness = 0,
									symbolSize = c(3,3)),
	geoData = loc_geo)

4、绘制的连线图效果如下:
在这里插入图片描述
案例D、remapB()函数绘制迁徙图
1、虚构一份数据

start_point <- rep('温州市',2)
destination <- c('丽水市', '杭州市')
data_DF <- data.frame(start_point, destination)
data_DF
  start_point terminal_point
1      温州市         丽水市
2      丽水市         杭州市

2、绘制迁徙图

result <- remap(data_DF, theme = get_theme('bright'))

3、迁徙图效果如下:
在这里插入图片描述
案例E、remapC()函数绘制填充图
1、虚构城市名单及对应值

city <- mapNames('zhejiang')
value <- runif(11, min = 1, max = 100)
data_DF <- data.frame(city, value)
data_DF
     city     value
1  丽水市  3.509584
2  杭州市 61.542740
3  温州市 12.679259
4  宁波市 67.178476
5  舟山市 24.896772
6  台州市 18.937361
7  金华市 73.125014
8  衢州市 30.247672
9  绍兴市 48.873504
10 嘉兴市 44.157908
11 湖州市 92.731507

2、绘制填充图:

result <- remapC(data_DF,
				 title = '浙江省热力图',
				 maptype = 'zhejiang',
				 color = 'red',
				 theme = get_theme('Dark'),
				 maxdata = 100, 
				 mindata = 1)

3、效果如下:
在这里插入图片描述
参考链接:https://zhuanlan.zhihu.com/p/23247602

  • 12
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
cv::remap()函数是OpenCV中的一个图像处理函数,用于对图像进行重映射。重映射是一种常见的图像处理操作,它可以将一个图像中的像素按照一定的规则映射到另一个图像中的像素位置上。 具体来说,cv::remap()函数可以将一个输入图像中的像素根据指定的映射关系,映射到输出图像中的指定位置上。这个映射关系是通过两个输入参数map1和map2来指定的,这两个参数分别是存储了x和y方向上的映射关系的两个矩阵。矩阵中的每个元素对应于输出图像中的一个像素位置,其值表示了输入图像中对应像素的位置。 cv::remap()函数的具体用法如下: ```cpp void cv::remap( cv::InputArray src, // 输入图像 cv::OutputArray dst, // 输出图像 cv::InputArray map1, // x方向上的映射关系 cv::InputArray map2, // y方向上的映射关系 int interpolation, // 插值方式 int borderMode = cv::BORDER_CONSTANT, // 边缘处理方式 const cv::Scalar& borderValue = cv::Scalar() // 边缘填充值 ); ``` 其中,interpolation参数表示了插值方式,常用的插值方式有: - cv::INTER_NEAREST:最近邻插值法 - cv::INTER_LINEAR:双线性插值法 - cv::INTER_CUBIC:双三次插值法 - cv::INTER_LANCZOS4:Lanczos插值法 borderMode参数表示了边缘处理方式,常用的边缘处理方式有: - cv::BORDER_CONSTANT:常数边缘填充 - cv::BORDER_REPLICATE:复制边缘像素 - cv::BORDER_REFLECT:反射边缘像素 - cv::BORDER_WRAP:环绕边缘处理 borderValue参数表示了边缘填充值,如果使用常数边缘填充方式,则需要指定该值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值