ggforce|繪制區域輪廓-區域放大-尋找你的“onepiece”


 

首發於“生信補給站” https://mp.weixin.qq.com/s/fm69bw-3cww1YEW_kBcTHQ

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

 

擁有財富、名聲、權力,這世界上的一切的男人 “海賊王”哥爾·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加一個輪廓應該會更方便的區分。

img

二 ggforce繪制輪廓

1 添加輪廓

geom_mark_...()系列函數能夠非常簡單的圍繞數據組繪制輪廓,以下四個參數可以繪制不同的輪廓:

  • geom_mark_circle()

  • geom_mark_ellipse()

  • geom_mark_hull()

  • geom_mark_rect()

使用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繪圖,生信圖形可視化匯總)

 

【覺得不錯,右下角點個“在看”,期待您的轉發,謝謝!】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM