https://mp.weixin.qq.com/s/fm69bw-3cww1YEW_kBcTHQweb
更多關於R語言,ggplot2繪圖,生信分析的內容,關注有驚喜😄。ide
擁有財富、名聲、權力,這世界上的一切的男人 「海賊王」哥爾·D·羅傑,在被行刑受死以前說了一句話,讓全世界的人都涌向了大海。「想要個人寶藏嗎?若是想要的話,那就到海上去找吧,我所有都放在那裏。」,世界開始迎接「大海賊時代」的來臨。函數
ggforce是ggplot2的擴展包,「擅長」於根據數據繪製輪廓以及區域放大。先將總體分爲幾個重要的「版圖」,而後根據「線索」重點放大後在此區域進行精細「搜尋」,最終找到「ONEPIECE」!😄優化
#載入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
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()
在上述輪廓的基礎上添加標籤和指向箭頭,試試看效果如何
p + geom_mark_rect(aes(label = tzone))
標籤和箭頭的位置被優化了,此外背景默認爲白色,指示符爲線條加文本,很容易知道每一個組的標籤。
ggforce做爲ggplot2的擴展包,也能直接使用ggplot2的主題設置
p + geom_mark_rect(aes(label = tzone), show.legend = FALSE) +
theme_void()
然而不少狀況下,圍繞組繪製矩形或圓形是不理想的,此時就須要geom_mark_hull()
函數來圍繞數據組的輪廓繪製更復雜的多邊形。
#使用hull須要加載concaveman包
library(concaveman)
p + geom_mark_hull(aes(label = tzone)) +
theme_void()
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()
若是「寶藏」的區域就在上述的位置之一(全圖展現),如今發現更可能在某個區域,那就使用facet_zoom()
函數放大或聚焦在特定區域。
#xlim和ylim,基於座標聚焦區域
p + facet_zoom(xlim = c(-155, -160.5), ylim = c(19, 22.3))
#結合filter函數,基於特定項聚焦區域
p + facet_zoom(xy = tzone == "Pacific/Honolulu",zoom.data = tzone == "Pacific/Honolulu")
注:原圖中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繪圖,生信圖形可視化彙總)