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語言入門及數據挖掘

回覆 人工智能 三個月入門人工智能

回覆 數據分析師 數據分析師成長之路

回覆 機器學習 機器學習的商業應用

回覆 數據科學 數據科學實戰

回覆 常用算法 常用數據挖掘算法


分享到:


相關文章: