前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绘图-完美简单的分组边界你应该学这个!

绘图-完美简单的分组边界你应该学这个!

作者头像
作图丫
发布2022-03-29 13:42:43
6940
发布2022-03-29 13:42:43
举报
文章被收录于专栏:作图丫

导语

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去让你的图片更加美观!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档