第 7 章 数据可视化

library(ggplot2)
library(patchwork)
`%>%` <- magrittr::`%>%`

clean_plotly <- function(p = ggplot2::last_plot(), ...) {
  plotly::ggplotly(p, ...) %>% 
    plotly::config(displayModeBar = FALSE)
}

David Robinson 给出为何使用 ggplot2 11 当然也有 Jeff Leek 指出在某些重要场合不适合 ggplot2 12 并且给出强有力的 证据,其实不管怎么样,适合自己的才是好的。也不枉费 Garrick Aden-Buie 花费 160 页幻灯片逐步分解介绍 优雅的ggplot2Malcolm Barrett 也介绍了 ggplot2 基础用法,还有 Selva Prabhakaran 精心总结给出了 50 个 ggplot2 数据可视化的 例子 以及 Victor Perrier 为小白用 ggplot2 操碎了心地开发 RStudio 插件 esquisse 包,Claus O. Wilke 教你一步步创建出版级的图形 https://github.com/clauswilke/practical_ggplot2

ggplot2 是十分方便的统计作图工具,相比 Base R,为了一张出版级的图形,不需要去调整每个参数,实现快速出图。集成了很多其它统计计算的 R 包,支持丰富的统计分析和计算功能,如回归、平滑等,实现了作图和模型的无缝连接。比如图7.1,使用 loess 局部多项式平滑得到数据的趋势,不仅仅是散点图,代码量也非常少。

ggplot(mpg, aes(displ, hwy)) +
  geom_point(aes(color = class)) +
  geom_smooth(se = TRUE, method = "loess") +
  labs(
    title = "Fuel efficiency generally decreases with engine size",
    subtitle = "Two seaters (sports cars) are an exception because of their light weight",
    caption = "Data from fueleconomy.gov"
  )
简洁美观

图 7.1: 简洁美观

故事源于一幅图片,我不记得第一次见到这幅图是什么时候了,只因多次在多个场合中见过,所以留下了深刻的印象,后来才知道它出自于一篇博文 — Using R packages and education to scale Data Science at Airbnb,作者 Ricardo Bion 还在其 Github 上传了相关代码13。除此之外还有几篇重要的参考资料:

  1. Pablo Barberá 的 Data Visualization with R and ggplot2
  2. Kieran Healy 的新书 Data Visualization: A Practical Introduction
  3. Matt Leonawicz 的新作 mapmate, 可以去其主页欣赏系列作品14
  4. tidytuesday 可视化挑战官方项目 还有 tidytuesday
  5. ggstatsplot 可视化统计检验、模型的结果
  6. ggpubr 制作出版级统计图形
  7. Thomas Lin Pedersen Drawing Anything with ggplot2
  8. Designing ggplots: making clear figures that communicate
  9. ggh4x 提供 ggplot2 的额外定制功能
  10. ggdist Visualizations of distributions and uncertainty
  11. gghighlight
  12. ggnetwork
  13. ggPMX ‘ggplot2’ Based Tool to Facilitate Diagnostic Plots for NLME Models
  14. ggpp ggpp: Grammar Extensions to ‘ggplot2’

如 Berton Gunter 所说,数据可视化只是一种手段,根据数据实际情况作展示才是重要的,并不是要追求酷炫。

3-D bar plots are an abomination. Just because Excel can do them doesn’t mean you should. (Dismount pulpit).

— Berton Gunter 15

gridlatticeggplot2 的基础,gganimate 是 ggplot2 一个扩展,它将静态图形视为帧,调用第三方工具合成 GIF 动图或 MP4 视频等,要想深入了解 ggplot2,可以去看 Hadley Wickham, Danielle Navarro, and Thomas Lin Pedersen 合著的《ggplot2: elegant graphics for data analysis》第三版 https://ggplot2-book.org/