随心所欲地运用ggplot2画图
很久以前,我写过《用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
下面以截图方式,摘录部分效果展示下(顺便吐槽,公众号的代码功能实在太弱,用起来太麻烦):
- 画圆:
- 画扇形
- 绘制螺旋渐开线
- 绘制心形图
- 环绕圆圈画文字
- 环绕曲线文字
接下去,要实现绘图自由,就举一反三多练习吧!
注:本文首发表于“不靠谱颜论”公众号,并同步至本站。