ggforce是ggplot2的扩展包,“擅长”于根据数据绘制轮廓以及区域放大。先将整体分为几个重要的“版图”,然后根据“线索”重点放大后在此区域进行精细“搜寻”,最终找到“ONEPIECE”!????

一 载入数据,R包

#载入R包
library(tidyverse)
library(ggforce)
library(nycflights13)
#使用airports数据集
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_~

绘制基础图形

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”特定区域。

其实可以做很多事情,遇到需要区别,重点展示的案例不妨试一下!

◆ ◆ ◆  ◆ ◆

往期精品(点击图片直达文字对应教程)

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

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

  1. python opencv轮廓提取_Python + Opencv2 实现轮廓提取,轮廓区域面积计算

    对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算. 本篇文章的主要内容就是 ...

  2. python cv2 轮廓的包络 面积_Python + Opencv2 实现轮廓提取,轮廓区域面积计算

    对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算. 本篇文章的主要内容就是 ...

  3. pythonopencv提取轮廓区域_Python + Opencv 实现轮廓提取,轮廓区域面积计算

    Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结 ...

  4. MATLAB绘制WRF模拟区域和局部的放大

    MATLAB绘制WRF模拟区域和局部的放大 clc;clear;close all filename = 'ETOPO2v2g_f4.nc'; ncdisp(filename);% lon=doubl ...

  5. 通过path绘制点击区域

    通过path绘制点击区域 效果 源码 https://github.com/YouXianMing/Animations // // TapDrawImageView.h // TapDrawImag ...

  6. Matlab绘制带有填充区域的曲线

    Matlab绘制带有填充区域的曲线 https://zhuanlan.zhihu.com/p/435763835 效果如图所示: clear;clc; syms t n = 50; x = linsp ...

  7. GoogleEarth二次开发平台指南(3) ---如何获取点坐标、绘制线路和区域、沿指定线路三维漫游

    上一文讲解了谷歌地球二次开发中遇到如何把图片.模型导入到谷歌地球的指定位置的问题.除了用户将自己的图片.模型导入到谷歌地球中来构建自己的三维场景外,获取点坐标.标注点位置.绘制线条和区域界线.沿指定线 ...

  8. 解决高德地图锁屏黑屏定位不更新,高德地图绘制定位轨迹,高德定位判断定位停留点,高德地图将所有坐标绘制在可视区域内

    本文章主要介绍 高德定位锁屏黑屏定位不更新的问题. 实现流程是:程序开始阶段正常执行定位,注册监听锁屏监听,唤醒cpu监听,当锁屏 广播每2秒发起一起单次定位唤醒.源码如下: package net. ...

  9. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

最新文章

  1. Tomcat启动之异常java.lang.IllegalStateException
  2. Android面试题目整理与讲解
  3. 属兔的人今日运势-360星座网_【生肖运势】12月17日
  4. java classifier_Java 朴素贝叶斯分类器、SVM(5行代码)实现乳腺癌分类
  5. 什么是pisa测试_PISA测试排名世界第一,中国教育已是世界冠军?
  6. Synergy,一个软件团队质量改进之路之一 --- 规划
  7. 你知道该如何搭建 AI 智能问答系统吗?
  8. 新时代ITer们的思考及购书有奖活动
  9. [redis]redis五种数据类型和应用场景
  10. SSRF(目录穿越)
  11. 英语之形容词和副词规则
  12. 「微服务」修改服务注册到nacos默认的命名空间和分组名称
  13. 目标检测中的常见指标
  14. python生成带有表格的图片
  15. 智多星手机销售系统.
  16. 【SQL语言】数据库原理与设计
  17. 矩阵(n阶方阵)的初等变换 初等矩阵 几何意义
  18. 如何写好状态机?跑马灯/流水灯Verilog HDL实现
  19. 野火iMX6ULL Pro开发板移植SDL2
  20. 程序员的三年创业之路

热门文章

  1. 【项目管理】项目进度管理的关键路径
  2. 【软件质量】软件质量
  3. 深入理解 操作系统 LRU算法(以洛谷P1540题为例)
  4. 【Java】命令行生成JavaDoc文档
  5. 【Python】Python列表基本操作
  6. renderTo:Ext.getBody()的意思
  7. x264中I,P,B帧和PTS,DTS的关系
  8. Oracle创建表空间、创建用户以及授权
  9. hibernate(3)对象关联映射
  10. 中国软件开发project师之痛