请选择 进入手机版 | 继续访问电脑版

[R语言] R绘制漂亮 的中国地图的实现示例

  [复制链接]
查看287 | 回复66 | 2021-10-12 19:47:01 | 显示全部楼层 |阅读模式
目次

ggmap

提及 用R绘制中国地图,很多有履历 的老司机肯定会保举

  1. ggmap
复制代码
,无论是内里 自带的各种地区绘图、经纬度查询以及可以与
  1. ggplot
复制代码
无缝衔接绘制地区统计图,这都是R中别的 绘制地图所难以超越的上风 。

但怎样 R常常 无法获取

  1. ggmap
复制代码
内里 的地图。当我想导入中国地图时,就会出现如下图所示的标题 。

报错信息

由于数模所需,为了硬着头皮举行 绘制,哪怕丑一些,以是 探索出了下面两种绘制中国地图的方法。

maps + mapdata

这种方式绘制中国地图非常的简单,只必要 一行代码(留意 要先调用两个R包

  1. maps
复制代码
,
  1. mapdata
复制代码
):

  1. map("china", col = "red4", ylim = c(18, 54), panel.first = grid())
复制代码

便可以得到如下图所示的绘制效果 。

R绘制漂亮

的中国地图的实现示例

但这幅图只是一幅单纯的中国地图,假如 我们想要插入部分城市的生齿 数据以及别的 信息,该怎样 添加呢?(数据泉源 :2015-2016年中国城市生齿 数量 排名)

起首 来看看我们的数据信息(代码有点丑,不要在意这些细节):

  1. beijing = c('北京&天津', 39.90419989999999, 116.4073963, 1961.24 + 1293.82)
  2. shanghai = c('上海', 31.2303904, 121.4737021, 2301.91)
  3. zhengzhou = c('郑州', 34.7472541716, 113.6249284647, 862.65)
  4. wulumuqi = c('乌鲁木齐', 43.8266013700, 87.6168405804, 311.03)
  5. haerbin = c('哈尔滨', 45.8021755616, 126.5358247345, 1063.6)
  6. xian = c('西安', 34.3412614674, 108.9398165260, 846.78)
  7. wuhan = c('武汉', 30.5927599029, 114.3052387810, 978.54)
  8. chengdu = c('成都', 30.5702183724, 104.0647735044, 1404.76)
  9. lasa = c('拉萨', 29.6441135160, 91.1144530801, 55.94)
  10. chongqing = c('重庆', 29.5647048135, 106.5507137149, 2884.62)
  11. kunming = c('昆明', 24.8796595146, 102.8332118852, 643.2)
  12. guangshen = c('广州&深圳', 23.0206747828, 113.7517837567, 1270.08 + 1035.79)
  13. cities = c(beijing, shanghai, zhengzhou, wulumuqi, haerbin, xian, wuhan,
  14. chengdu, lasa, chongqing, kunming, guangshen)
  15. mat.cities = as.data.frame(matrix(cities, ncol = 4, byrow = T), stringsAsFactors = F)
  16. names(mat.cities) = c('names', 'lat', 'long', 'population')
  17. mat.cities$population = as.numeric(as.character(mat.cities$population)) / 100
  18. mat.cities$lat = as.numeric(as.character(mat.cities$lat))
  19. mat.cities$long = as.numeric(as.character(mat.cities$long))
复制代码

具体 操作实在 也非常简单:利用

  1. for循环
复制代码
搭配基础的
  1. points()
复制代码
函数,利用 如下所示的代码即可:

  1. map("china", col = "red4", ylim = c(18, 54), panel.first = grid())for (i in 1:12) {
  2. points(mat.cities$long[i], mat.cities$lat[i], cex = 1.5, pch = 16)
  3. }
  4. title('Population')
复制代码

R绘制漂亮

的中国地图的实现示例

这里应该还必要 用别的 信息来显现 我们的生齿 数,但是由于这个绘图不是很美丽 ,以是 就不举行 接下来的操作了。后面先容 一个更美丽 的不翻墙绘制生齿 地图的方法——

  1. ggplot
复制代码
+
  1. mapdata
复制代码

ggplot2 + mapdata

话不多说,直接用我们前面天生 的数据举行 绘制。这里讲一下大概的流程:

同上一种方式,利用

  1. map()
复制代码
函数产生中国地图的表面 (假如 能上google,利用
  1. ggmap
复制代码
当然更好)。

利用

  1. ggplot
复制代码
举行 绘图:

  • 利用
    1. geom_path()
    复制代码
    函数将我们天生 的中国地图的表面 绘制出来,这里修改颜色,选择清新天然 的粉色;
    1. geom_point()
    复制代码
    将各个城市的位置用散点点上,同时点的大小表示生齿 的多少,这里用清新蓝;
    1. geom_text()
    复制代码
    在每个点上添加上城市的名称;
  • 修改各个标签以及各种title的名称;
  • 举行 修改主题、Mac上表现 中笔墨 等操作。
  1. china <- map("china", plot = F)
  2. ggplot() +
  3. geom_path(data = china, aes(long, lat, group = group), color = '#FD9FA4', show.legend = F) +
  4. geom_point(data = mat.cities, aes(x = long, y = lat, size = population), alpha = 0.8, color = '#8BB6D6') +
  5. # geom_text_repel(data = mat.cities, aes(x = long, y = lat, label = names), family = "STHeiti") +
  6. geom_text(data = mat.cities, aes(x = long, y = lat, label = names), family = "STHeiti") +
  7. labs(x = '经度', y = '纬度', title = '中国十二个地区人口地图', size = '人口(百万)') +
  8. theme_bw() +
  9. theme(panel.border = element_blank(),
  10. text = element_text(family = "STHeiti"),
  11. plot.title = element_text(hjust = 0.5))
复制代码

产生出来的图像如下图所示:

生齿
图1

如许 的图已经基本算作是能看的了,但这并不是逼迫 症患者所终极 寻求 的绘图。其美中不足的是每个城市的名称覆盖在我们的散点上了。

通常我们的做法非常简单,在

  1. geom_text()
复制代码
中设置参数,将全部 的笔墨 向上下左右选一个方向,防止覆盖。如许 做当然没标题 ,这里先容 另一种方法,可以举行 自顺应 调整以防覆盖。

ggrepel

我们的做法是利用

  1. ggrepel
复制代码
包中的
  1. geom_text_repel()
复制代码
函数更换 掉我们本来 的
  1. geom_text()
复制代码
,细致 的同砚 已经发现,这就是我们上面代码表明 掉的部分。这时只需将其封印排除 ,同时封印住
  1. geom_text()
复制代码
这个小调皮 ,我们的绘图就大功告成了!

生齿
地图2

到此这篇关于R绘制美丽 的中国地图的实现示例的文章就先容 到这了,更多干系 R绘 中国地图内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 孤客9116 | 2021-10-12 21:44:00 | 显示全部楼层
大神好强大!
回复

使用道具 举报

avatar 千无情实 | 2021-10-13 06:11:45 | 显示全部楼层
帖子很有深度!
回复

使用道具 举报

avatar 老顽童760 | 2021-10-14 10:02:52 | 显示全部楼层
admin楼主好聪明啊!
回复

使用道具 举报

avatar 旭日非常 | 2021-10-15 23:09:36 | 显示全部楼层
今天过得很不爽!
回复

使用道具 举报

avatar 胡37 | 2021-10-16 01:14:50 | 显示全部楼层
好帖子!
回复

使用道具 举报

avatar 凌善慧 | 2021-10-16 02:05:56 | 显示全部楼层
顶顶更健康!
回复

使用道具 举报

avatar 尹以为荣 | 2021-10-16 12:03:29 | 显示全部楼层
看帖、回帖、拿分、走人
回复

使用道具 举报

avatar 忆困血馆闻 | 2021-10-16 12:51:33 | 显示全部楼层
很给力!
回复

使用道具 举报

avatar 曹羁奔陈构 | 2021-10-16 12:54:28 | 显示全部楼层
admin楼主人气很旺!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则