ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”
ggforce是ggplot2的擴展包,“擅長”于根據(jù)數(shù)據(jù)繪制輪廓以及區(qū)域放大。先將整體分為幾個重要的“版圖”,然后根據(jù)“線索”重點放大后在此區(qū)域進行精細“搜尋”,最終找到“ONEPIECE”!????
一 載入數(shù)據(jù),R包
#載入R包 library(tidyverse) library(ggforce) library(nycflights13) #使用airports數(shù)據(jù)集 head(airports)# A tibble: 6 x 8faa ? 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_~繪制基礎(chǔ)圖形
p <- airports %>%filter(lon < 0, tzone != "\\N") %>%ggplot(aes(lon, lat, color = tzone)) + geom_point(show.legend = FALSE) ? p可以看到不同的tzone使用不同的顏色標識出來了,那如果給每個tzone加一個輪廓應(yīng)該會更方便的區(qū)分。
二 ggforce繪制輪廓
1 添加輪廓
geom_mark_...()系列函數(shù)能夠非常簡單的圍繞數(shù)據(jù)組繪制輪廓,以下四個參數(shù)可以繪制不同的輪廓:
geom_mark_circle()
geom_mark_ellipse()
geom_mark_hull()
geom_mark_rect()
使用geom_mark_rect(),以每個時區(qū)為組繪制圓角矩形輪廓
p + geom_mark_rect()2 添加標簽,箭頭
在上述輪廓的基礎(chǔ)上添加標簽和指向箭頭,試試看效果如何?
p + geom_mark_rect(aes(label = tzone))發(fā)現(xiàn)標簽和箭頭的位置被優(yōu)化了,沒有重疊;指示符為線條加文本(默認白色背景),可以很容易知道每個組的標簽。
3 更改主題設(shè)置
ggforce作為ggplot2的擴展包,也能直接使用ggplot2的主題設(shè)置
p + geom_mark_rect(aes(label = tzone), show.legend = FALSE) +theme_void()4 hull-k ?, hulk
然而很多情況下,圍繞組繪制矩形或圓形是不理想的,此時就需要geom_mark_hull()函數(shù)來圍繞數(shù)據(jù)組的輪廓繪制更復(fù)雜的多邊形。
#使用hull需要加載concaveman包 library(concaveman) p + geom_mark_hull(aes(label = tzone)) +theme_void()優(yōu)化:
1)fill函數(shù)添加輪廓中顏色,show.legend去掉legend;
2)expand調(diào)整輪廓大小,theme_no_axes只保留邊距。
使用expand參數(shù)中使用units()參數(shù)命令調(diào)整輪廓與點的邊緣的距離大小。
對于白色背景或在線文章(基本上都是白色背景),很難確定繪圖的邊距。theme_no_axes()只保留邊框可以較好的解決這個問題。
p + geom_mark_hull(aes(label = tzone, fill = tzone),show.legend = FALSE, expand = unit(3, "mm")) +theme_no_axes()三 ggforce區(qū)域放大
如果“寶藏”的區(qū)域就在上述的位置之一(全圖展示),現(xiàn)在發(fā)現(xiàn)更可能在某個區(qū)域,那就使用facet_zoom()函數(shù)放大或聚焦在特定區(qū)域。
1 xlim和ylim設(shè)置聚焦區(qū)域
選擇左下角的Pacific/Honolulu區(qū)域進行展示
#xlim和ylim,基于坐標聚焦區(qū)域 p?+ facet_zoom(xlim = c(-155, -160.5), ylim = c(19, 22.3))2 基于特定項設(shè)置聚焦區(qū)域
#結(jié)合filter函數(shù),基于特定項聚焦區(qū)域 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")好了 ,現(xiàn)在就完成了根據(jù)“組”添加輪廓,再重點“zoom”特定區(qū)域。
其實可以做很多事情,遇到需要區(qū)別,重點展示的案例不妨試一下!
◆?◆?◆ ?◆?◆
往期精品(點擊圖片直達文字對應(yīng)教程)
機器學(xué)習(xí)
后臺回復(fù)“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結(jié)
以上是生活随笔為你收集整理的ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随机信号通过带通滤波器
- 下一篇: 莱斯分布概率分布曲线