ggforce|繪製區域輪廓-區域放大-尋找你的「onepiece」

 

首發於「生信補給站」 https://mp.weixin.qq.com/s/fm69bw-3cww1YEW_kBcTHQweb

更多關於R語言,ggplot2繪圖,生信分析的內容,關注有驚喜😄。ide

 

擁有財富、名聲、權力,這世界上的一切的男人 「海賊王」哥爾·D·羅傑,在被行刑受死以前說了一句話,讓全世界的人都涌向了大海。「想要個人寶藏嗎?若是想要的話,那就到海上去找吧,我所有都放在那裏。」,世界開始迎接「大海賊時代」的來臨。函數

 

ggforce是ggplot2的擴展包,「擅長」於根據數據繪製輪廓以及區域放大。先將總體分爲幾個重要的「版圖」,而後根據「線索」重點放大後在此區域進行精細「搜尋」,最終找到「ONEPIECE」!😄優化

 

一 載入數據,R包

#載入R包
library(tidyverse)
library(ggforce)
library(nycflights13)
#使用airports數據集
head(airports)

# A tibble: 6 x 8
 faa   name                        lat   lon   alt    tz dst   tzone        
 <chr> <chr>                     <dbl> <dbl> <dbl> <dbl> <chr> <chr>        
1 04G   Lansdowne Airport          41.1 -80.6  1044    -5 A     America/New_~
2 06A   Moton Field Municipal Ai~  32.5 -85.7   264    -6 A     America/Chic~
3 06C   Schaumburg Regional        42.0 -88.1   801    -6 A     America/Chic~
4 06N   Randall Airport            41.4 -74.4   523    -5 A     America/New_~
5 09J   Jekyll Island Airport      31.1 -81.4    11    -5 A     America/New_~
6 0A9   Elizabethton Municipal A~  36.4 -82.2  1593    -5 A     America/New_~

繪製基礎圖形

p <- airports %>%
 filter(lon < 0, tzone != "\\N") %>%
 ggplot(aes(lon, lat, color = tzone)) +
 geom_point(show.legend = FALSE)  
p

能夠看到不一樣的tzone使用不一樣的顏色標識出來了,那若是給每一個tzone加一個輪廓應該會更方便的區分。spa

img

二 ggforce繪製輪廓

1 添加輪廓

geom_mark_...()系列函數可以很是簡單的圍繞數據組繪製輪廓,如下四個參數能夠繪製不一樣的輪廓:code

  • geom_mark_circle()ip

  • geom_mark_ellipse()ci

  • geom_mark_hull()rem

  • geom_mark_rect()get

使用geom_mark_rect(),以每一個時區爲組繪製圓角矩形輪廓

p + geom_mark_rect() 

img

2 添加標籤,箭頭

在上述輪廓的基礎上添加標籤和指向箭頭,試試看效果如何

p + geom_mark_rect(aes(label = tzone)) 

img

標籤和箭頭的位置被優化了,此外背景默認爲白色,指示符爲線條加文本,很容易知道每一個組的標籤。

 

3 更改主題設置

ggforce做爲ggplot2的擴展包,也能直接使用ggplot2的主題設置

p + geom_mark_rect(aes(label = tzone), show.legend = FALSE) +
 theme_void()

img

4 hull-k 加強

然而不少狀況下,圍繞組繪製矩形或圓形是不理想的,此時就須要geom_mark_hull()函數來圍繞數據組的輪廓繪製更復雜的多邊形。

#使用hull須要加載concaveman包
library(concaveman)
p + geom_mark_hull(aes(label = tzone)) +
 theme_void()

img

1)優化:fill函數添加輪廓中顏色,show.legend去掉legend

2)優化:expand調整輪廓大小,theme_no_axes只保留邊距

使用expand參數中使用units()參數命令調整輪廓的大小。

對於白色背景或在線文章(基本上都是白色背景),很難肯定繪圖的邊距。theme_no_axes()只保留邊框能夠較好的解決這個問題。

p + geom_mark_hull(aes(label = tzone, fill = tzone), 
show.legend = FALSE, expand = unit(3, "mm")) +
 theme_no_axes()

img

 

三 ggforce區域放大

若是「寶藏」的區域就在上述的位置之一(全圖展現),如今發現更可能在某個區域,那就使用facet_zoom()函數放大或聚焦在特定區域。

1)xlim和ylim設置聚焦區域

#xlim和ylim,基於座標聚焦區域
p + facet_zoom(xlim = c(-155, -160.5), ylim = c(19, 22.3))

img

2)基於特定項設置聚焦區域

#結合filter函數,基於特定項聚焦區域
p + facet_zoom(xy = tzone == "Pacific/Honolulu",zoom.data = tzone == "Pacific/Honolulu")

img

注:原圖中Pacific/Honolulu不展現。

 

四 總體展現

 

p + geom_mark_hull(aes(label = tzone, fill = tzone), show.legend = FALSE, expand = unit(3, "mm")) +
theme_no_axes() +
facet_zoom(x = tzone == "America/Los_Angeles",zoom.data = tzone == "America/Los_Angeles")

好了 ,如今就完成了根據「組」添加輪廓,再重點「zoom」特定區域。

其實能夠作不少事情,遇到須要區別,重點展現的案例不妨試一下!

◆ ◆ ◆ ◆ ◆

精心整理(含圖版)|你要的全拿走!有備無患 (R統計,ggplot2繪圖,生信圖形可視化彙總)

 

【以爲不錯,右下角點個「在看」,期待您的轉發,謝謝!】

相關文章
相關標籤/搜索