pythonic生物人

Nature biotechnology图表VS你的图表,差别可能就藏在这几条“pattern fills”里!

本次使用R复现Nature biotechnology的底纹图。

底纹图,直观区分分组数据,当分组数据比较,对颜色选择有困难症时,非常好用。

s41587-022-01383-2原图,
s41587-022-01383-2原图,
❤️复现效果图❤️
❤️复现效果图❤️

读入数据

Image

绘图

使用R语言一步步复现一下上图Nature biotechnology类似图。

  • ✅默认分组图,
ggplot() +
# 柱状图
  geom_col(data = stats, 
           aes(x = age_group, y = mean, fill = sex),
           width = 0.5,
           color = "black", alpha = 0.7, size = 0.5,
           position = position_dodge(0.6)) +
# 误差棒
  geom_errorbar(data = stats,
                aes(x = age_group, ymin = mean - sem, ymax = mean + sem, group = sex),
                width = 0.1, size = 0.9,
                position = position_dodge(0.6)) +
# 散点
  geom_point(data = break_data,
             aes(x = age_group, y = value, fill = sex),
             pch = 21, size = 2, alpha = 0.6, stroke = 1,
             position = position_jitterdodge(jitter.width = 0.1, 
                                             dodge.width = 0.5)) + guides(fill = "none")  + 
# 设置分组
  scale_fill_manual(values = c(male = "#6baed6", female = "#ff9999")) +
  labs(x = "age (weeks)", y = NULL, fill = "Sex") 
Image

这是一个bar plot + 误差棒 + 抖动散点图 + 颜色分组。

当两组数据颜色选的不合适时,上图往往出现辨识度不高的问题,下面我们给他加上底纹。

  • ✅底纹图
ggplot() +
# 带图案的柱状图
  geom_col_pattern(
  data = stats,
  aes(x = age_group, y = mean, pattern = sex, fill = sex),  # 同时映射fill和 pattern
  width = 0.5,
  pattern_angle = 45,
  pattern_density = 0.2,
  pattern_spacing = 0.06,
  pattern_key_scale = 0.4,
  color = "black",
  alpha = 0.7, 
  size = 0.5,
      position = position_dodge(0.6)
) +
scale_pattern_manual(
  values = c("male" = "stripe", "female" = "circle"),  # 设置底纹
  guide = guide_legend(override.aes = list(fill = c("#6baed6", "#ff9999")))
) +
scale_fill_manual(values = c("male" = "#6baed6", "female" = "#ff9999"))+
# 误差棒
  geom_errorbar(
    data = stats,
    aes(x = age_group, ymin = mean - sem, ymax = mean + sem, group = sex),
    width = 0.15, size = 0.9, position = position_dodge(0.5)
  ) +
# 散点图
  geom_point(
    data = break_data,
    aes(x = age_group, y = value, fill = sex),
    pch = 21, size = 2, alpha = 0.6, stroke = 1,
    position = position_jitterdodge(jitter.width = 0.1, dodge.width = 0.5)
  ) 
Image

好了,bar plot + 误差棒 + 抖动散点图 + 颜色分组 + 底纹分组。

也可以设置底纹渐变模式,

ggplot() +
  geom_col_pattern(
    data = stats,
    aes(
      x = age_group, y = mean, 
      pattern_fill = sex,    # 映射给渐变主色
      pattern_fill2 = sex    # 映射给渐变次色
    ),
    pattern = "gradient",    # 设置底纹渐变模式
    pattern_orientation = "vertical",  # 渐变方向:垂直
    width = 0.5,
    color = "black",
    size = 0.5,
    position = position_dodge(0.6)
  )
Image
ggplot() +
  geom_col_pattern(
    data = stats,
    aes(
      x = age_group, y = mean, 
      pattern_fill = sex,    # 映射给渐变主色
      pattern_fill2 = sex    # 映射给渐变次色
    ),
    pattern = "plasma",    # 渐变模式
    pattern_orientation = "vertical",  # 渐变方向:垂直
    width = 0.5,
    color = "black",
    size = 0.5,
    position = position_dodge(0.6)
  ) 
Image

其它模式,

Image

本期结束!


获取绘图代码+测试数据+数据处理方法+依赖包安装方法,

(备注:299)

图片

-推荐阅读-

👉matplotlib教程:20w字+数百张图形+1W行代码+详细代码注释

图片

👉seaborn教程:12.3万字+500多张图形+8000行代码

图片

👉R可视化教程:39个章节+20w字+数百张图

图片
图片