拥有财富、名声、权力,这世界上的一切的男人 “海贼王”
哥尔·D·罗杰
,在被行刑受死之前说了一句话,让全世界的人都涌向了大海。“想要我的宝藏吗?如果想要的话,那就到海上去找吧,我全部都放在那里。”,世界开始迎接“大海贼时代”的来临。
ggforce是ggplot2的扩展包,“擅长”于根据数据绘制轮廓以及区域放大。先将整体分为几个重要的“版图”,然后根据“线索”重点放大后在此区域进行精细“搜寻”,最终找到“ONEPIECE”!😄
library(tidyverse)
library(ggforce)
library(nycflights13)
head(airports)
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加一个轮廓应该会更方便的区分。
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()![](http://mmbiz.qpic.cn/mmbiz_png/Y21ubvXhTjADeSVDxju15OicNPgj43roWm2mlVnD31J5rcEomRQcLvcpXmRJNGETSLaLrqlMyzpq8yWGicFjyNnw/640?wx_fmt=png)
4 hull-k , hulk
然而很多情况下,围绕组绘制矩形或圆形是不理想的,此时就需要
geom_mark_hull()
函数来围绕数据组的轮廓绘制更复杂的多边形。
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()
函数放大或聚焦在特定区域。
1 xlim和ylim设置聚焦区域
选择左下角的
Pacific/Honolulu区域进行展示
p + facet_zoom(xlim = c(-155, -160.5), ylim = c(19, 22.3))
2 基于特定项设置聚焦区域