导语
GUIDE ╲
广义上讲,ggplot2的主要目的是数据可视化,以便用户分析数据,而不是提供实用的工具来构成自定义图样。ggforce设计的目的是为ggplot2图形进行补充,更好的反映数据的分布情况。在本文中,主要介绍了ggforce对散点图添加分组边界和一些附加的可视化功能。
ggforce安装
代码语言:javascript复制###安装ggforce及其他需要用到的包
install.packages("tidyverse")
install.packages("ggforce")
install.packages("nycflights13")
library(tidyverse)
library(ggforce)
library(nycflights13)
可视化介绍
本示例将使用nycflights13包中的数据,基于ggplot通过地理位置对机场进行可视化。
代码语言:javascript复制###对数据可视化(散点图)
p <- airports %>%
filter(lon < 0, tzone != "\N") %>%
ggplot(aes(lon, lat, color = tzone))
geom_point(show.legend = FALSE)
p
用ggforce进行轮廓绘制
ggforce中有四个标记函数,它们在数据周围绘制的形状而有所不同
代码语言:javascript复制geom_mark_circle()
geom_mark_ellipse()
geom_mark_hull()
geom_mark_rect()
代码语言:javascript复制##从geom_mark_rect()开始:在每个组周围绘制一个圆角矩形
p
geom_mark_rect()
代码语言:javascript复制###使用geom_mark设置标签参数(pic.1)
p
geom_mark_rect(aes(label = tzone))
##重置主题并且隐藏图例(pic.2)
p
geom_mark_rect(aes(label = tzone), show.legend = FALSE)
theme_void()
pic.1
pic.2
在大多数情况下,使用矩形或者圆形边框并不能完全满足我们的需求,那么就需要使用更加个性化的形状!这就要用到geom_mark_hull()函数了。
代码语言:javascript复制##添加更复杂的轮廓
library(concaveman)
p
geom_mark_hull(aes(label = tzone))
theme_void()
代码语言:javascript复制##填充
p
geom_mark_hull(aes(label = tzone, fill = tzone), show.legend = FALSE)
theme_void()
ggforce的放大功能
为了更细致的观察图片的各个部分,ggforce提供了个性化的放大功能,用户可以通过设置坐标去任意放大某个部分,通过facet_zoom()去实现此功能,往往会生成两个图片,一个展示完整图片,另一个针对特定区域。
代码语言:javascript复制###放大左下角粉色部分(通过xlim,ylim设置坐标)
p
facet_zoom(xlim = c(-155, -160.5), ylim = c(19, 22.3))
##也可以通过选择类别的名称对特定的类别j进行放大
p
facet_zoom(xy = tzone == "Pacific/Honolulu")
##这两种都会得到如下的结果--放大粉色部分
应用示例
代码语言:javascript复制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")
通过Voronoi优化位置
代码语言:javascript复制library(deldir)
p
geom_mark_hull(aes(fill = tzone), expand = unit(3, "mm"))
coord_cartesian(xlim = c(-130, -180), ylim = c(50, 75))
geom_voronoi_segment()
附加功能1:在饼状图中提取某一部分
代码语言:javascript复制##原始图形
planes %>%
count(engine) %>%
ggplot()
geom_arc_bar(aes(x0 = 0, y0 = 0, r0 = 0.7, r = 1, amount = n, fill = engine), alpha = 0.3, stat = "pie")
##提取后
planes %>%
count(engine) %>%
mutate(focus = ifelse(engine == "Turbo-jet", 0.2, 0)) %>%
ggplot()
geom_arc_bar(aes(x0 = 0, y0 = 0, r0 = 0.7, r = 1, amount = n, fill = engine, explode = focus), alpha = 0.3, stat = "pie")
theme_no_axes()
附加功能2:桑基图的绘制
代码语言:javascript复制###
prep_planes <- planes %>%
filter(year > 1998, year < 2005) %>%
filter(engine != "Turbo-shaft") %>%
select(manufacturer, engine) %>%
head(500)
prep_planes %>%
gather_set_data(1:2) %>%
ggplot(aes(x, id = id, split = y, value = 1))
##隐藏图例
geom_parallel_sets(aes(fill = engine), show.legend = FALSE, alpha = 0.3)
##改变填充和字体颜色
geom_parallel_sets_axes(axis.width = 0.1, color = "lightgrey", fill = "white")
##删除标签的旋转
geom_parallel_sets_labels(angle = 0)
theme_no_axes()
小编总结
ggforce是ggplot2的一个很棒的补充包,可以很清晰地反映数据的分布趋势和特征,除了本文提到的内容以外,ggforce还有很多有趣的功能,比如ggforce包中geom_sina参数可以整合小提琴图和箱型图去对数据进行可视化。希望大家可以在绘图的时候应用到ggforce去让你的图片更加美观!