点图

R 中的可视化最佳实践

Nick Strayer

Instructor

何时不宜用柱状图

  • 非数量型
  • 非线性变换

R 中的可视化最佳实践

点图

  • 直接用点替代柱
  • 又称点图或散点条图

R 中的可视化最佳实践

点图的优点

  • 精度高
  • 表达高效
  • 简洁

R 中的可视化最佳实践

本课数据

  • 使用 WHO 数据的一个子集
  • 国家为"有趣"的子集——看看原因
interestingCountries <- c("NGA", "SDN", "FRA", "NPL", "MYS", "TZA", "YEM", "UKR", "BGD", "VNM")

who_subset <- who_disease %>%
  filter(
    countryCode %in% interestingCountries,
    disease == 'measles',
    year %in% c(2006, 2016)) %>% 
  mutate(year = paste0('cases_', year)) %>% 
  arrange(year, region) %>%
  pivot_wider(names_from = year, values_from = cases)
R 中的可视化最佳实践

who_subset

who_subset
# A tibble: 10 x 6
   region countryCode country     disease cases_2006 cases_2016
   <chr>  <chr>       <chr>       <chr>        <dbl>      <dbl>
 1 AFR    NGA         Nigeria     measles        704      17136
 2 AFR    TZA         Tanzania    measles       2362         33
 3 EMR    SDN         Sudan (the) measles        228       1767
 4 EMR    YEM         Yemen       measles       8079        143
 5 EUR    FRA         France      measles         40         79
 6 EUR    UKR         Ukraine     measles      42724        102
 7 SEAR   BGD         Bangladesh  measles       6192        972
 8 SEAR   NPL         Nepal       measles       2838       1269
 9 WPR    MYS         Malaysia    measles        564       1569
10 WPR    VNM         Viet Nam    measles       1978         46
R 中的可视化最佳实践

点图代码

  • geom_point():一个类别轴 + 一个数值轴
who_subset %>% 
  # 这里做对数变换,因此不适合用柱状图
  ggplot(aes(y = country, x = log10(cases_2016))) +
  # 简单的 geom_point()
  geom_point()
R 中的可视化最佳实践

R 中的可视化最佳实践

为点图排序

  • 排序能大幅提升可读性
  • 在美学映射中使用 reorder()
who_subset %>% 
  # 计算 2016 相对 2006 的对数倍数变化
  mutate(logFoldChange = log2(cases_2016/cases_2006)) %>% 
  ggplot(aes(x = logFoldChange, y = reorder(country, logFoldChange))) +
  geom_point()
R 中的可视化最佳实践

R 中的可视化最佳实践

Passons à la pratique !

R 中的可视化最佳实践

Preparing Video For Download...