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绘图,生信图形可视化汇总)

 

【以为不错,右下角点个“在看”,期待您的转发,谢谢!】

相关文章
相关标签/搜索