绘制地图

1.ggplot2提供了一些工具,让使用maps包绘制的地图与其他ggplot2图形的结合变得十分方便。关于中国地图的绘制可以参考:http://cos.name/2009/07/drawing-china-map-using-r/

国家 maps地图数据名

法国

意大利

新西兰

美国(郡)

美国(州)

美国(边界)

全世界

france

italy

nz

country

state

usa

world

我们使用地图数据主要有两种原因:1.为空间数据添加参考轮廓线2.通过不同的区域填充颜色以构建等值线图。

添加地图边界可以通过borders()来完成。函数的前两个参数指定了要绘制的地图名map以及其中的具体区域region,其余的参数用于控制边界的外观。填充颜色的多边形使用的是fill。

1
2
3
4
library(maps)
data(us.cities)
> big_citi <- subset(us.cities,pop > 500000)  ##人口大于50万的城市
qplot(long,lat,data=big_citi) + borders("state",size=0.5)

  

1
2
> tx_city <- subset(us.cities,country.etc=="TX")
ggplot(tx_city,aes(long,lat)) + borders("county","texas",colour="grey70") + geom_point(colour = "black",alpha=0.5)

  德克萨斯州的城市区划:

使用map_data将地图数据转化为数据框,此数据框可以在之后通过merge() 操作与我们的数据相融合,最终绘制处等值线图。

1
2
3
4
5
6
7
8
9
> states <- map_data("state")
> arrests <- USArrests
names(arrests) <- tolower(names(arrests))
> arrests$region <- tolower(rownames(USArrests))
> choro <- merge(states,arrests,by="region")
#由于绘制多边形时涉及顺序问题,且merge破坏了原始排序,故将行重新排序
> choro <- choro[order(choro$order),]
qplot(long,lat,data=choro,group=group,fill=assault,geom="polygon")

  

#######################华丽的分割线############################

接下来简单介绍一下中国地图的绘制。

首先要成功安装好两个包:

1
2
install.packages("maps")
install.packages("mapdata")

  然后加载:

1
2
library(maps)
library(mapdata)

  加载成功后我们可以使用map方法绘制中国地图:

1
map("china")

  

以上的地图比较老了(重庆仍然在四川省内),获取比较新的,下载中国GIS数据(http://cos.name/wp-content/uploads/2009/07/chinaprovinceborderdata_tar_gz.zip),解压到我的文档中(默认的R工作空间),然后下载maptools包:install.packages("maptools"),加载到R的工作空间:library(maptools),然后绘制地图:

1
2
> x <- readShapePoly('bou2_4p.shp')
plot(x)

  

通过调节plot命令中的col(旧版为fg)参数来根据自己的需要对地图中的省份着以特定的颜色。

GIS数据包含925个多边形,col参数应该时一个长度为925的向量,第i个分量的取值就代表了地图中第i个多边形的颜色:

1
plot(x,col=gray(924:0/924))

  

在地图中只画出部分省份所代表的区域:

1
2
3
4
5
6
7
8
9
10
11
x=readShapePoly('bou2_4p.shp');
getColor=function(mapdata,provname,provcol,othercol)
{
    f=function(x,y) ifelse(x %in% y,which(y==x),0);
    colIndex=sapply(mapdata@data$NAME,f,provname);
    fg=c(othercol,provcol)[colIndex+1]; 
    return(fg);
}
midchina <- c("河南省","山西省","湖北省","安徽省","湖南省","浙江省");
plot(x, col = getColor(x, midchina, rep("green", 6),
    "white"), border = "black", xlab = "", ylab = "")

  ##若不显示其他省份,只需将border设置为"white"即可。

  

根据人口的多少,对区域进行着色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
provname=c("北京市","天津市","河北省","山西省","内蒙古自治区",
        "辽宁省","吉林省","黑龙江省","上海市","江苏省",
        "浙江省","安徽省","福建省","江西省","山东省",
        "河南省","湖北省","湖南省","广东省",
        "广西壮族自治区","海南省","重庆市","四川省","贵州省",
        "云南省","西藏自治区","陕西省","甘肃省","青海省",
        "宁夏回族自治区","新疆维吾尔自治区","台湾省",
        "香港特别行政区");
pop=c(1633,1115,6943,3393,2405,4298,2730,3824,1858,7625,
        5060,6118,3581,4368,9367,9360,5699,6355,9449,
        4768,845,2816,8127,3762,4514,284,3748,2617,
        552,610,2095,2296,693);
provcol=rgb(red=1-pop/max(pop)/2,green=1-pop/max(pop)/2,blue=0);
plot(x,col=getColor(x,provname,provcol,"white"),xlab="",ylab="");

  

颜色越深的地方表示人口越密集。

2.还有ERmap包,它是可交互的地图数据可视化工具,托管在github,基于echarts开发的一个包,它本身提供的参数也比较少。

2.1迁移图

1
2
3
4
5
> cong1 <- c("bei jing","chang sha","shang hai","hang zhou")
> dao2 <- c("chang sha","shang hai","hang zhou","xia men")
> dat2 <- data.frame(cong1,dao2)
> out <- remap(dat2)
plot(out)

  

这个包有个严重的问题是,你输入中文的时候,它有时候无法辨别,幸好当你输入地名的时候可以使用拼音,也不区分大小写,比如输入西安的时候,你可以输入“xi an”也可以“xi an shi”.

2.2颜色等级图

1
2
3
4
> city <- c("上海","浙江","四川","北京")
> value <- c(3734,3248,2361,3305)
> cdata <- data.frame(city,value)
remapC(cdata,maptype="China",color='skyblue')

  

上图因为鼠标移动到浙江区域上,所以高亮黄色显示。同时标签信息在途中显示。

如果我们想在颜色等级图上添加迁移图特点,那我们就要用到marklineData和markPointData这两个参数,它们默认为NULL。

我们下面添加气泡:

1
remapC(cdata,maptype = "China",color = 'skyblue',markPointData=dat)

 

添加箭头:

1
remapC(cdata,maptype="China",color='skyblue',markLineData=dat)

  

如果即要有箭头,又要又气泡:

1
remapC(cdata,maptype="China",color='skyblue',markLineData=dat,markPointData=dat)

  

2.3 热力图

现在我们来继续绘制热力图。数据是随便取的。

1
2
3
4
5
6
7
8
9
10
11
> city <- c("xia men","shang hai","bei jing","chong qing")
> heat <- c(0.9,0.6,0.8,0.7)
> temp <- get_geo_position(as.vector(city))  ##获取坐标
> heatdata <- data.frame(temp$lon,temp$lat,heat)
> heatdata
  temp.lon temp.lat heat
1 118.0959 24.48582  0.9
2 121.4802 31.23631  0.6
3 116.4136 39.91101  0.8
4 106.5572 29.57100  0.7
remapH(heatdata,minAlpha=0.51,title="Heat Map from REmap")

  

好文要顶 关注我 收藏该文 

三、R语言可视化--ggplot2和REmap包绘制地图相关推荐

  1. R数据可视化第三弹---ggplot2和REmap包绘制地图

    绘制地图 1.ggplot2提供了一些工具,让使用maps包绘制的地图与其他ggplot2图形的结合变得十分方便.关于中国地图的绘制可以参考:http://cos.name/2009/07/drawi ...

  2. R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战

    R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战 目录

  3. R语言可视化——ggplot2画回归曲线

    目录 0引言 1.构造回归数据 2.画图 2.1载入包 2.2 准备数据添加散点 2.3添加回归线 2.5 添加公式R方 2.6 添加方差分析表 2.6 回归数据调整 3.总结 0引言 在数据可视化- ...

  4. R语言可视化散点图、ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置segment.square为假以获得斜曲线,segment.inflect设置为真以引入拐点

    R语言ggplot2可视化:可视化散点图并为散点图数据点添加文本标签.使用ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置segment.square为假以获得斜 ...

  5. R语言可视化散点图、ggrepel包geom_text_repel函数避免数据点之间的标签互相重叠(设置nudge_x参数、hjust参数和direction参数配置数据点标签在可视化图像左右两侧边缘

    R语言ggplot2可视化:可视化散点图并为散点图数据点添加文本标签.使用ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置nudge_x参数.hjust参数和di ...

  6. R语言:再谈REmap包

    之前写过一篇关于Remap的文章,原文链接为:http://blog.csdn.net/wzgl__wh/article/details/53108754 但有许多网友都存在不同的问题,在我的微信公众 ...

  7. R语言可视化包ggplot2包改变边距(margin)实战(Modify the Margins)

    R语言可视化ggplot2包改变边距(margin)实战(Modify the Margins) 目录 R语言可视化ggplot2包改变边距(margin)实战(Modify the Margins)

  8. R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战 #仿真数据

  9. R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战

    R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战 #仿真 ...

最新文章

  1. 黑马程序员—易混淆的知识
  2. docker WARNING: IPv4 forwarding is disabled. 解决方法
  3. jQuery中each的break和continue
  4. 复制Excel分类汇总结果的三种方法
  5. fixedBox固定div漂浮代码 支持ie6以上大部分浏览器
  6. Tomcat7基于Redis的Session共享实战二
  7. python gui 选择
  8. PowerBI Report Server 自定义视图无法显示故障解决
  9. java 将小数度数转换为度分秒格式
  10. mysql什么是表的并的关系_MySQL表与表的关系
  11. 第十章 Scala 容器基础(二十二):合并有序集合
  12. 关键词工具(seo常用关键词工具有哪些?)
  13. JUnit5 + JMockit 知识整理
  14. 科学家提出记忆形成新解 大脑玩的拼图游戏
  15. Illustrator插件开发-AI插件-aip格式-第一章 第一小节 概述
  16. 程序员偷看了老板的微信分组,惊呆了……
  17. 前后端分离springboot+vue社区志愿者招募管理系统idea
  18. 腾讯混合云存储 TStor 系列再添新成员,并行存储一体机正式发布​
  19. 在 LaTeX 中定义变量
  20. 电商订单批量导入API接口功能

热门文章

  1. 出租车管理系统的设计与实现
  2. 40句让你坦露心声的经典句子!!
  3. matlab 模态叠加法,基础激励下基于模态叠加法谐响应分析.doc
  4. 电脑族 久坐不动防病攻略
  5. Django计算机毕业设计超市会员积分管理系统(程序+LW)Python
  6. Centos 6.5 x64 安装 虚拟专用网 服务器
  7. 微软最新提供的project2010帮助资料
  8. 雷达简介-雷达工作的基本参数-PART1
  9. 【随记】win10,系统,任务栏--工具栏--桌面,存在两个“控制面板”
  10. 17素材网免费下载方法,不用会员,免费超简单方法!