7.1 元素

7.1.1 标签

图形的标签分为横纵轴标签、刻度标签、主标题、副标题等

data.frame(
  dates = seq.Date(
    from = as.Date("1945-01-01"),
    to = as.Date("1974-12-31"), 
    by = "quarter"
  ),
  presidents = as.vector(presidents)
) %>%
  ggplot(aes(x = dates, y = presidents)) +
  geom_line(color = "slategray", na.rm = TRUE) +
  geom_point(size = 1.5, color = "darkslategray", na.rm = TRUE) +
  scale_x_date(date_breaks = "4 year", date_labels = "%Y") +
  labs(
    title = "1945年至1974年美国总统每季度支持率",
    y = "支持率 (%)",
    caption = "数据源: R 包 datasets"
  ) +
  theme_minimal(base_size = 10.54, base_family = "source-han-sans-cn")
美国总统支持率:自1945年第一季度至1974年第四季度

图 7.2: 美国总统支持率:自1945年第一季度至1974年第四季度

7.1.2 注释

图中注释的作用在于高亮指出关键点,提请读者注意。文本注释可由 ggrepel 包提供的标签图层 geom_label_repel() 添加,标签数据可独立于之前的数据层,标签所在的位置可以通过参数 directionnudge_y 精调,图 7.3 模拟了一组数据。

set.seed(2020)
library(ggrepel)
dat <- data.frame(
  x = seq(100),
  y = cumsum(rnorm(100))
)
anno_data <- dat %>%
  subset(x %% 25 == 10) %>%
  transform(text = "text")
dat %>%
  ggplot(aes(x, y)) +
  geom_line() +
  geom_label_repel(aes(label = text),
    data = anno_data,
    direction = "y",
    nudge_y = c(-5, 5, 5, 5)
  ) +
  theme_minimal()
文本注释

图 7.3: 文本注释

ggrepel 包的图层 geom_text_repel() 支持所有数据点的注释,并且自动调整文本的位置,防止重叠,增加辨识度,如图 7.4。当然,数据点如果过于密集也不适合全部注释,高亮其中的关键点即可。

mtcars %>%
  transform(cyl = as.factor(cyl)) %>%
  ggplot(aes(wt, mpg, label = rownames(mtcars), color = cyl)) +
  geom_point() +
  geom_text_repel(max.overlaps = 12) +
  theme_minimal()
少量点的情况下可以全部注释,且可以解决注释重叠的问题

图 7.4: 少量点的情况下可以全部注释,且可以解决注释重叠的问题

Claus Wilke 开发的 ggtext 包支持更加丰富的注释样式,详见网站 https://wilkelab.org/ggtext/

7.1.3 主题

ggchartsbbplot prettyB 美化 Base R 图形