颜林林的个人网站

随心所欲地运用ggplot2画图

2024-01-22 06:46
题图
(题图由AI生成)

很久以前,我写过《用ggplot2画迷宫》和《用ggplot2给娃手工做张九九乘法表》,都属于不务正业地乱用 ggplot2

最近,有网友来信咨询 ggvenn 的用法,希望整些花活,比如让集合名字环绕着维恩图的圆圈排列。这种技巧其实难度不大,很适合用我上述不务正业的技巧瞎搞,但我感觉却不太适合包装到一个相对“严肃”的专用包里。

另外,常在一些微信群里,看到有人贴出某些文献中的图,问这种图该如何画。这些图一般都是一些基本图形元素(如线条、矩形、文字等)的组合。如果元素不多,通常最好的回答就是“用PPT”。如果元素比较多,且没有现成的包可用,则不妨自己试试 ggplot2(甚至可以自己写一个包,让将来其他人有“现成的包”可用)。

本篇,就来介绍这样的思路,希望对大家上手 ggplot2 随意作图有所帮助。


ggplot2 可以看作是对 grid 作图系统的封装,提供了一个更方便的操作接口,基于 Grammar of Graphics 的操作接口,能够很方便地将数据绑定(或者说映射)到某种图形属性(如位置、颜色、大小)上。所以,用 ggplot2 绘图的核心思想,就是根据需要自行构造一个数据框(data.frame,或更好的选择是来自 tidyverse 包的 data_frame),然后用相应的 geom_xxx() 函数绘图,画点、画线、画多边形、画文字,甚至贴图都可以。数据就绪后,绘图基本就是一个命令即可搞定。

这里,需要注意的是,ggplot2 并没有直接提供诸如画圆、椭圆、扇形等函数,但拥有 geom_polygon(),我们就几乎拥有了任意形状,只需要定出相应坐标,剩下的让 grid 作图系统进行描边和填充即可。

我写了几个例子,供大家快速进阶,打开下面这个网址(或点击文末的“阅读原文”)即可:

https://yanlinlin82.github.io/sandbox/try-ggplot2-20240121.nb.html


下面以截图方式,摘录部分效果展示下(顺便吐槽,公众号的代码功能实在太弱,用起来太麻烦):

  1. 画圆:
代码
效果
  1. 画扇形
代码
效果
  1. 绘制螺旋渐开线
代码
效果
  1. 绘制心形图
代码
效果
  1. 环绕圆圈画文字
代码
效果
  1. 环绕曲线文字
代码
效果

接下去,要实现绘图自由,就举一反三多练习吧!

--- END ---

注:本文首发表于“不靠谱颜论”公众号,并同步至本站。

相关文章