R可视化:图片为背景的气泡地图

R可视化:图片为背景的气泡地图

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者:噜啦啦啦啦 统计学出身 R语言中文社区专栏作者

知乎ID:

https://www.zhihu.com/people/shen-chang-43

前言

关于气泡地图bubble map 是一种很常见的地理位置信息相关的很常见的可视化图,可同时传递多维度信息,用气泡的位置传递物理位置信息,气泡的大小表示变量1值的大小,气泡的颜色可以标识变量2的大小/类别,可以用

时间frame制作.gif来表示各变量随时间的变化。

bubble map一般是通过导入.shp的地图数据来完成的,但很多情况下,标准的地图数据是很难获得的,只有图片形式的的图片,这时候为了绘制bubble map 就需要导入外部图片为ggplot的背景。下面以澳大利亚图片地图为例,展示这种情况下bubble map的画法,因为是网络图受版权保护,在实际操作中可以选择更清晰高质量的背景图。

本文包含五部分内容:

  • 图片背景加载到ggplot和plotly图中
  • 使用ggplot2绘制图片为背景的气泡地图
  • 使用gganimate生成气泡gif图
  • 使用plotly制作图片为背景的可视化地图
  • 制作plotly的交互api并放入汇报中
R可视化:图片为背景的气泡地图

1library("pacman")#加载包辅助包
2p_load(ggplot2, EBImage, jpeg, ggpubr, plotly)
3P_load(ggthemr)#配色主题包
4p_load(gganimate, animation)#制作动图
5devtools::install_github("thomasp85/gganimate")
R可视化:图片为背景的气泡地图

首先通过模拟生成用于作图的数据:

1data_map2colnames(data_map) 3data_map[,"class"]4data_map[,"name"]5data_map[,"lon"]6data_map[,"lat"]7data_map[,1:19]
R可视化:图片为背景的气泡地图

模拟生成的绘图数据

数据整形(melt)之后完成绘图过程,在layout里使用经纬度(lon/lat)为x,y轴坐标。aes里的colour是用来区分类目的,size实现气泡效果,theme 函数用来隐藏坐标轴。

 1ggthemr('dust')
2img 3data_map_ 4p_bm 5 background_image(img)+xlim(0,10)+ylim(0,10)+
6 geom_point()+
7 theme(axis.line=element_blank(),axis.text.x=element_blank(),
8 axis.text.y=element_blank(),axis.ticks=element_blank(),
9 axis.title.x=element_blank(),
10 axis.title.y=element_blank(),
11 panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
12 panel.grid.minor=element_blank(),plot.background=element_blank(),
13 text=element_text(family="STKaiti",size=9))+
14 #scale 标准化size的大小
15 scale_size(range = c(2,20))+
16 labs(colour='不同类',size = "人口数")+
17 ggtitle("澳大利亚人口数")
18
R可视化:图片为背景的气泡地图

制造动态气泡图

ggplot2里有生成gif的辅助包gganimate,步骤如下,但要注意的是,这个过程会对图片进行压缩,导致清晰度受影响,更加适合简单的图表gif。业务要求高的情况下,可以使用ps来生成gif

 1#制作动图
2pp 3 background_image(img)+xlim(0,10)+ylim(0,10)+
4 geom_point()+
5 theme(axis.line=element_blank(),axis.text.x=element_blank(),
6 axis.text.y=element_blank(),axis.ticks=element_blank(),
7 axis.title.x=element_blank(),
8 axis.title.y=element_blank(),
9 panel.background=element_blank(),panel.border=element_blank(),panel.grid.major=element_blank(),
10 panel.grid.minor=element_blank(),plot.background=element_blank(),
11 text=element_text(family="STKaiti",size=9))+
12 scale_size(range = c(2,20))+
13 labs(title = 'time: {frame_time}', x = '', y = '',colour='不同类',size = "人口数")
14 transition_time(as.Date(variable)) +
15 ease_aes('linear');p
16animate(p, nframes = 24, renderer = gifski_renderer("gganim.gif"))
17
R可视化:图片为背景的气泡地图

plotly交互效果图

plotly库实现图片背景的形式是在layout函数中赋值image参数,但需要注意的是,目前只接受html格式的图片,用本地图片做背景可以将图片上传到公共访问的网站上,这个案例中我使用的方法是将本地图片上传到github里面的repo,source 引用图片的网址。交互图可以在图片工作区直接存储成为本地html,也可以生成api

 1data_map_$class 2p  3 type = "scatter",mode = 'markers',
4 text = paste("类别: ", data_map_[1:5,"class"],
5 "
人口数: ", data_map_[1:5,"value"],
6 "
地区:",data_map_[1:5,"name"])) %>%
7 layout(
8 images = list(
9 list(source = "https://raw.githubusercontent.com/diana12333/daxing/master/3be045e7b19a803485464c9fea3b3f1c.png",
10 xref = "x",
11 yref = "y",
12 x = 0.5,
13 y = 10.1,
14 sizex = 10,
15 sizey = 10,
16 sizing = "stretch",
17 opacity = 0.8,
18 layer = "below"
19 )),
20 xaxis = list(showgrid = F,range = c(0, 10)), yaxis = list(showgrid = F,range = c(0, 10)))
21p
22chart_link = api_create(p, filename="example_plotly",sharing = "public")

生成的api如下

https://plot.ly/~dianashen/9/#/

(详情请打开浏览器输入网址查看)

注:获得API前,需要申请plotly账号在api设置里获得api key,申请网址:Make charts and dashboards online,然后保存证书许可证。

1Sys.setenv("plotly_username"="your_plotly_username")
2Sys.setenv("plotly_api_key"="your_api_key")
R可视化:图片为背景的气泡地图

参考文献:

Getting Started with Plotly for R

(https://plot.ly/r/getting-started/)

R可视化:图片为背景的气泡地图

往期推荐:

  • 手把手教你用R语言制作网络爬虫机器人(二)
  • R中的子集选取运算符
  • 如何优雅地计算多变量
R可视化:图片为背景的气泡地图

回复 爬虫 爬虫三大案例实战

回复 Python 1小时破冰入门

回复 数据挖掘 R语言入门及数据挖掘

回复 人工智能 三个月入门人工智能

回复 数据分析师 数据分析师成长之路

回复 机器学习 机器学习的商业应用

回复 数据科学 数据科学实战

回复 常用算法 常用数据挖掘算法


分享到:


相關文章: