ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”

简介: ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”

本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/fm69bw-3cww1YEW_kBcTHQ


拥有财富、名声、权力,这世界上的一切的男人 “海贼王”哥尔·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加一个轮廓应该会更方便的区分。

二 ggforce绘制轮廓

1 添加轮廓

geom_mark_...()系列函数能够非常简单的围绕数据组绘制轮廓,以下四个参数可以绘制不同的轮廓:

  • geom_mark_circle()
  • geom_mark_ellipse()
  • geom_mark_hull()
  • geom_mark_rect()

使用geom_mark_rect(),以每个时区为组绘制圆角矩形轮廓

p + geom_mark_rect()

2 添加标签,箭头

在上述轮廓的基础上添加标签和指向箭头,试试看效果如何?

p+geom_mark_rect(aes(label=tzone))

发现标签和箭头的位置被优化了,没有重叠;指示符为线条加文本(默认白色背景),可以很容易知道每个组的标签。


3 更改主题设置

ggforce作为ggplot2的扩展包,也能直接使用ggplot2的主题设置

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

theme_void()

4 hull-k  , hulk

然而很多情况下,围绕组绘制矩形或圆形是不理想的,此时就需要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()

三 ggforce区域放大


如果“宝藏”的区域就在上述的位置之一(全图展示),现在发现更可能在某个区域,那就使用facet_zoom()函数放大或聚焦在特定区域。

1 xlim和ylim设置聚焦区域

选择左下角的Pacific/Honolulu区域进行展示

#xlim和ylim,基于坐标聚焦区域
p + facet_zoom(xlim = c(-155, -160.5), ylim = c(19, 22.3))

2 基于特定项设置聚焦区域

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

相关文章
|
C++
矩形和区域
下面有三个绘图函数需要一个指向矩形结构的指针: FillRect(hdc,&rect,hbursh);//填充 FrameRect(hdc,&rect,hbrush);//掏空 InvertRect(hdc,&rect);//内部取反 [cpp] view plaincopy ...
883 0
|
C# 图形学
C#窗口矩形区域着色
C#写的一个GUI窗口,有几百个矩形区域。每个矩形区域的颜色随时都可能改变,并且多次改变。 我放弃使用label绘制矩形,因为效果不好。拖控件的界面使用power packs中的rectangleshape绘制。
873 0
|
计算机视觉
在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
这是两个相关的程序,前者是后者的基础。实际上前一个程序也是在前面博文的基础上做的修改,请参考《在OpenCV中利用鼠标绘制直线》 。下面贴出代码。 程序之一,在OpenCV中利用鼠标绘制矩形 [c-sharp] view plaincopy #include    #include    #include    #pragma comment( lib, "cv.
1104 0
获取 UIElement 相对于屏幕原点所占用的矩形区域
原文:获取 UIElement 相对于屏幕原点所占用的矩形区域 // 演示如何获...
923 0
|
8月前
|
C++
详细解读AnyCAD应用——修改指定点,线,面的坐标实现物体移动
详细解读AnyCAD应用——修改指定点,线,面的坐标实现物体移动
69 5
146.矩形区域的颜色填充
146.矩形区域的颜色填充
90 0
|
安全 网络安全
“灰色区域”不能成为安全的“法外之地”
本文讲的是“灰色区域”不能成为安全的“法外之地”,笔者在上一篇文章中说:NGFW开始聚焦FW、UTM尚未涉及的“灰色区域”。
1347 0
|
计算机视觉 C++ 监控
opencv2 使用鼠标绘制矩形并截取和保存矩形区域图像
  前言        好长时间没写博文了,今天偷偷懒写篇关于opencv2中鼠标响应操作的文章。       鼠标操作属于用户接口设计,以前一直使用Qt来做,但是如果只需要简单的鼠标,键盘操作,直接调用opencv库的函数也未尝不可,鼠标操作之前已经接触很多了,在MFC,QT,OpenGL,等等中,理论主要就是两点,一是监控鼠标操作,鼠标点击,移动,松开,然后通过mouse_event识别判断出那一种鼠标的操作,根据不同的操作然后进行处理,二是在主函数中加入鼠标的回调函数,将鼠标操作与程序的窗口绑定。
1160 0
|
9月前
|
定位技术
ArcGIS面要素最小外接矩形、外接圆的绘制方法
ArcGIS面要素最小外接矩形、外接圆的绘制方法
155 1
Echarts去掉叠堆折线区域图的区域颜色
Echarts去掉叠堆折线区域图的区域颜色
143 0

热门文章

最新文章