查看: 340|回复: 11

[R语言] 如何绘制高分必备的各类常见图表?要学就 all in!

[复制链接]

管理员

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

主题
739
注册时间
2020.6.16
在线时间
412 小时

发表于 2022.8.5 09:24:16 | 显示全部楼层 |阅读模式
在探索数据时,如何做到快速又轻松获得漂亮的发表级图表呢?

今天给大家推荐一款基于ggplot2的可视化R包grafify,包中内置多类科研人所需的常见图表和配色方案,代码简单,并且不同图表函数的参数逻辑一致,学会一个基本就能all in 全部图表的绘制方法!


发表级的散点柱形图、箱线图、箱线蜂群图、组合小提琴图、QQ图、密度分布曲线图、直方图、前后配对连线图,今天让你全部一次学会!

  1. #包的安装与载入:
  2. install.packages("grafify")
  3. library(grafify)
复制代码

一、两个变量探索

探索两个变量,即二维数据(X轴和Y轴),grafify所需的数据格式和ggplot2相同,为长数据格式。下文我们会使用内置的数据集进行学习,方便大家直接调用。

1. 条形图绘制

  1. #条形图可以使用plot_scatterbar_sd和plot_dotbar_sd两个函数(区别在于散点形式不同):
  2. dt <- iris #使用鸢尾数据集作为范例数据
  3. head(dt)
复制代码


  1. plot_scatterbar_sd(data = dt,
  2. xcol = Species,
  3. ycol = Sepal.Width,
  4. fontsize = 13) + #字号
  5. labs(title = "Scatter dots with bar & SD") + #标题
  6. guides(fill = "none") #去掉图例
复制代码


  1. #其它常用参数:
  2. #bwid:用于条形宽度
  3. #ewid:误差条宽度
  4. #symsize:符号/散点大小
  5. #b_alpha:条形图不透明度
  6. #s_alpha:符号/散点不透明度
  7. #jitter:散点抖动
  8. #ColPal:调色板选择
复制代码

颜色当然可以自定义,或者调用别的配色主题包,不过内置的色板配色十分不错,直接用更方便,所有色板参考如下:


  1. #参数修改:
  2. plot_scatterbar_sd(data = dt,
  3. xcol = Species,
  4. ycol = Sepal.Width,
  5. symsize = 3, fontsize = 13,
  6. bwid = 0.6, ewid = 0.4,
  7. b_alpha = 0.5, s_alpha = 0.8,
  8. jitter = 0.2,
  9. ColPal = "light")+
  10. labs(title = "Scatter dots with bar & SD")
复制代码


  1. #plot_dotbar_sd绘制条形图(散点样式为蜂群图):
  2. plot_dotbar_sd(data = dt,
  3. xcol = Species,
  4. ycol = Sepal.Width,
  5. dotsize = 1.4, fontsize = 13,
  6. bwid = 0.6, ewid = 0.4,
  7. b_alpha = 0.7, d_alpha = 0.9,
  8. ColPal = "light") +
  9. labs(title = "Dot plot with bar & SD")
复制代码


可以看到两个函数的不同点就在于散点样式,scatterbar为随机抖动,dotbar为整齐排列的蜂群图样式,大家可以按需选择。如果不需要展示散点(仅展示柱子+误差棒),可以通过将散点的不透明度调整为0隐藏。

  1. #dotbar中细微不同的参数:
  2. #dotsize:散点大小
  3. #d_alpha:散点不透明度
复制代码

2. 箱线图绘制

只要带散点效果的,函数都分为scatter和dot两个,箱线图和小提琴图也一样。

  1. #抖动散点箱线图:
  2. plot_scatterbox(data = dt,
  3. xcol = Species,
  4. ycol = Sepal.Width,
  5. symsize = 3, fontsize = 13,
  6. b_alpha = 0.5, s_alpha = 0.7,
  7. jitter = 0.1,
  8. ColPal = "fishy") +
  9. labs(title = "Scatter & boxplot") +
  10. guides(fill = "none")
复制代码


  1. #蜂群箱线图:
  2. plot_dotbox(data = dt,
  3. xcol = Species,
  4. ycol = Sepal.Width,
  5. symsize = 3, fontsize = 13,
  6. b_alpha = 0, d_alpha = 0.6, #通过调整不透明度从而隐去颜色
  7. jitter = 0.1,
  8. ColPal = "bright") +
  9. labs(title = "dot & boxplot") +
  10. guides(fill = "none")
复制代码


3. 小提琴图绘制

  1. #小提琴图+箱线图+蜂群散点图(默认):
  2. plot_dotviolin(data = dt,
  3. xcol = Species,
  4. ycol = Sepal.Width,
  5. trim = T,
  6. symsize = 1, fontsize = 13,
  7. b_alpha = 0,
  8. v_alpha = 0.6,
  9. d_alpha = 0.8,
  10. ColPal = "pale")+
  11. labs(title = "Dots & violin plot",
  12. subtitle = "no trimming (trim = T)")+ #尾巴修剪
  13. guides(fill = "none")
复制代码


如果我们不想展示散点,将散点的不透明度调整为0:

  1. #不修剪尾巴+隐藏散点:
  2. plot_dotviolin(data = dt,
  3. xcol = Species,
  4. ycol = Sepal.Width,
  5. trim = F,
  6. fontsize = 13,
  7. b_alpha = 0,
  8. v_alpha = 0.6,
  9. d_alpha = 0, #散点的不透明度设为0
  10. ColPal = "pale") +
  11. labs(title = "Dots & violin plot",
  12. subtitle = "default (trim = F)") + #尾巴不修剪
  13. guides(fill = "none")
复制代码


二、数据分布探索

1. QQ图(分位数-分位数图)绘制

  1. plot_qqline(data = dt,
  2. ycol = Petal.Length,
  3. group = Species,
  4. fontsize = 13) +
  5. labs(title = "QQ plot")
复制代码


QQ图也是散点图的一种,用于判断数据集是否近似于正态分布。

2. 密度分布曲线图绘制

  1. plot_density(data = dt,
  2. ycol = Petal.Length,
  3. group = Species,
  4. fontsize = 13)
复制代码


  1. #根据分组进行分面:
  2. plot_density(data = dt,
  3. ycol = Petal.Length,
  4. group = Species,
  5. fontsize = 13) +
  6. facet_wrap("Species")
复制代码


3. 直方图绘制

  1. plot_histogram(data = dt,
  2. ycol = Sepal.Width,
  3. group = Species,
  4. fontsize = 13)
复制代码


  1. #根据分组分面:
  2. plot_histogram(data = dt,
  3. ycol = Sepal.Width,
  4. group = Species,
  5. fontsize = 13) +
  6. facet_wrap("Species")
复制代码


三、实验/处理/干预/治疗前后数据探索

在论文中,特别是医学类期刊如柳叶刀,经常能看见一种有着配对关系的图表,用于展现同一类样本或配对样本在处理/实验/治疗/干预前后的变化,这一类图表我们叫做前后连线图。

下面我们用grafify包中内置的数据集进行前后连线图的学习。

  1. head(data_t_pdiff) #配对数据集,为治疗和未治疗组的小鼠体重,Subject为小鼠ID
复制代码


  1. plot_befafter_colours(data = data_t_pdiff,
  2. xcol = Condition,
  3. ycol = Mass,
  4. match = Subject, #按照小鼠ID进行匹配
  5. symsize = 3,
  6. fontsize = 13,
  7. ColPal = "light",ColRev = T) +
  8. labs(title = "Two-groups, matched colors")
复制代码


通过将同一ID的小鼠进行连线,我们能够直观看出治疗前后小鼠体重的变化。

  1. #双向重复测量数据前后连线图绘制:
  2. head(data_2w_Tdeath) #6个独立实验中,在两个时间点测量的两种细菌菌株感染后受感染宿主细胞的死亡百分比
复制代码


  1. plot_befafter_colours(data = data_2w_Tdeath,
  2. xcol = Time,
  3. ycol = PI,
  4. match = Experiment,
  5. symsize = 3,
  6. fontsize = 13) +
  7. facet_wrap("Genotype") + #按菌种分面
  8. labs(title = "Two-way repeated measures")
复制代码


对于复杂实验设计的数据,我们也可以轻松用前后连线图进行展示。

  1. #还可以用不同符号展示(plot_befafter_shapes):
  2. plot_befafter_shapes(data = data_2w_Tdeath,
  3. xcol = Time,
  4. ycol = PI,
  5. match = Experiment,
  6. s_alpha= 0.7,
  7. symsize = 2, #符号大小
  8. symthick = 1, #符号粗细
  9. fontsize = 13,
  10. ColPal = "contrast",
  11. ColRev = T)+
  12. facet_wrap("Genotype")+
  13. labs(title = "Matched shapes")
复制代码


  1. #也可以仅显示单色:
  2. p <- plot_befafter_colours(data = data_t_pdiff,
  3. xcol = Condition,
  4. ycol = Mass,
  5. match = Subject,
  6. SingleColour = "#92a6de",
  7. fontsize = 13)

  8. p1 <- plot_befafter_shapes(data = data_t_pdiff,
  9. xcol = Condition,
  10. ycol = Mass,
  11. match = Subject,
  12. SingleColour = "#f6a1c9",
  13. fontsize = 13)
  14. library(patchwork)
  15. p + p1
复制代码


除了上述内容,也可以使用该包展示三个及更多的变量,同时也支持多种方差分析!篇幅关系,我们之后再给大家介绍。如果感兴趣的童鞋也可以通过下方【参考资料】处链接进行自主学习。

好啦,今天的分享就到这里!

【参考资料】
https://github.com/ashenoy-cmbi/grafify
[url=https://grafify-vignettes.netlify.app/]https://grafify-vignettes.netlify.app/
[/url]


本文作者:基迪奥-喵酱

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
新的一天加油!
回复

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 2022.8.5 20:47:49 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2021.4.14
在线时间
16 小时

发表于 7 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 7 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 6 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 5 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

帝王蝶

Rank: 4

主题
0
注册时间
2017.5.11
在线时间
65 小时

发表于 4 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 4 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

帝王蝶

Rank: 4

主题
0
注册时间
2016.5.10
在线时间
15 小时

发表于 3 天前 | 显示全部楼层
加油加油加油
回复 支持 反对

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 3 天前 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.4.1
在线时间
4 小时

发表于 前天 18:12 | 显示全部楼层
真厉害111
新的一天加油!
回复

使用道具 举报

功夫熊猫

Rank: 10Rank: 10Rank: 10

主题
0
注册时间
2020.11.21
在线时间
109 小时

发表于 前天 21:45 | 显示全部楼层
新的一天加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表