R绘图 | 浅谈散点图及其变体的作图逻辑

简介: R绘图 | 浅谈散点图及其变体的作图逻辑

scatter_review

引言

前几天看到群里读者朋友的提问,发现很多同学对作图仅局限于就图论图,今天就简单整理一下公众号发布过的「以散点为主体」的相关图形,简单归纳一下其内在逻辑联系。

几种常用散点图

1、普通散点图

普通散点图+拟合曲线PCoA进阶散点图

2、各种火山图或多象限散点图

火山图多象限散点图

3、气泡散点图

气泡热图1气泡热图2

示例数据和代码领取

木舟笔记永久VIP企划

「权益:」

  1. 「木舟笔记所有推文示例数据及代码(「在VIP群里」实时更新」)。


普通散点图

此类散点图以「散点」+不同散点「形状」「大小」「颜色映射」为主。

  • 「普通散点图+拟合曲线」
    「散点」+不同散点「形状」「颜色映射」

普通散点图+拟合曲线

「详细教程」R绘图 | 气泡散点图+拟合曲线

「核心代码:」

ggplot(plot_df, 
       aes(x = log10(mean_gdp_per_capita), 
           y = mean_access_perc)) + # 点的位置,即(x, y)
  geom_point(data = plot_df, 
             aes(size = mean_death_perc,  # 点的大小映射
                 fill = continent), # 点的填充颜色映射
             pch = 21) +
  geom_smooth(method = "loess") # 添加平滑曲线拟合
  • 「PCoA/UMAP/TSNE/PCA」
    「散点」+不同散点「颜色映射」

PCoA

「详细教程」跟着 Cell 学作图 | 主坐标分析(PCoA)及其可视化(vegan)

「核心代码:」

ggplot(data = plot_data, 
       aes(x=PCoA1, 
           y=PCoA2,  # 点的位置,即(x, y)
           fill=group)) + # 点的填充颜色映射 数据集相同可以放ggplot()里或geom_point()里
  geom_point(shape = 21,  # 散点类型(21为带边框的散点,即fill和color分别代表填充颜色和边框颜色)
             color = 'black', # 散点边框颜色
             size=4) + # 散点大小
  scale_fill_manual(values = c('#73bbaf','#d15b64','#592c93')) # fill颜色设置
  • 「进阶散点图」
    「散点」+不同散点「颜色、大小映射」

进阶散点图

此图为群友提问,没有写过,这里简单写一下。

「完整代码:」

## 示例数据
dt <- data.frame(item =  paste0('item',1:200),
                 NES = runif(200,0,2),
                 FDR = runif(200,0,0.1),
                 ZSCORE = runif(200,0,6),
                 P = runif(200,0,0.1))
ggplot(data = dt, 
       aes(x=ZSCORE, 
           y=NES,  # 点的位置,即(x, y)
           size = -log10(FDR), # 点的大小映射 
           color=-log10(P))) + # 点的颜色映射 
  geom_point() + 
  scale_color_gradient(low = '#e2d89b',high = '#811919') + # color渐变颜色设置
  geom_hline(yintercept =  1.3,linetype = 'dashed', col = '#c0c0c0')+ # 横线
  geom_vline(xintercept = 2,linetype = 'dashed', col = '#c0c0c0')+ # 竖线
  geom_text_repel(
    data = dt[dt$ZSCORE>4&dt$NES>1.5,],
    aes(label = item),
    size = 4.5,
    color = "black",
    segment.color = "black", show.legend = FALSE )+ #添加关注的点的名称
  theme_few()
ggsave('sactter_eg1.pdf',width = 6,height = 5)

scatter_eg1

各种火山图或多象限散点图

  • 「火山图」
    「散点」+不同散点「形状」「颜色映射」
    火山图的本质也是一样的,但是由于原始数据没有对散点进行分类(即上下调),需增加一步数据处理。

火山图

「详细教程」跟着 Cell 学作图 | 火山图进阶版

「核心代码:」

# 确定是上调还是下调,用于给图中点上色
# 阈值自行确定
df$threshold = factor(ifelse(df$P_value  < 0.05 & abs(df$fd) >= 0.25, 
                             ifelse(df$fd >= 0.25 ,'Up','Down'),'NoSignifi'),
                      levels=c('Up','Down','NoSignifi'))
ggplot(df,
       aes(x=fd,y= -log10(P_value),# 点的位置,即(x, y)
           size = logCPM, # 点的大小映射 
           fill = threshold))+  # 点的填充映射 
  geom_point(colour = "black", shape = 21, stroke = 0.5)+
  scale_size(limits  = c(2, 16))+  #控制最大气泡和最小气泡,调节气泡相对大小
  scale_fill_manual(values=c("#fe0000","#13fc00","#bdbdbd"))+ #确定点的颜色
  geom_vline(xintercept=c(-0.25,0.25),lty=2,col="black",lwd=0.5) + #添加横线|logFoldChange|>0.25
  geom_hline(yintercept = -log10(0.05),lty=2,col="black",lwd=0.5)  #添加竖线padj<0.05
  • 「多象限散点图」
    「散点」+不同散点「颜色映射」
    同样由于原始数据没有对散点进行分类(四分类或就分类),需增加一步数据处理。

多象限散点图

「详细教程」跟着Nucleic Acids Research学作图 -- 多组学九象限散点图

此教程来源公众号【生信师兄】。

「核心代码:」

# 分组处理:设置阈值,以正负log10(2)为阈值:
group <- ifelse((abs(data[,1]) > log10(2) & abs(data[,2]) > log10(2))|(abs(data[,1]) < -log10(2) & abs(data[,2]) < -log10(2)),
                "mRNA+RPF_both", ifelse(
                  (data[,1] > log10(2) & data[,2] < log10(2) & data[,2] > -log10(2))|(data[,1] < -log10(2) & data[,2] < log10(2) & data[,2] > -log10(2)),
                "mRNA_only", ifelse(
                  (data[,2] > log10(2) & data[,1] < log10(2) & data[,1] > -log10(2))|(data[,2] < -log10(2) & data[,1] < log10(2) & data[,1] > -log10(2)),
                "RPF_only", NA)))
p + geom_point(data=data, aes(mRNA_FC, RPF_FC, color = group))+
  scale_color_manual(values = c("mRNA+RPF_both" = "#dd8653", 
                                "mRNA_only" = "#59a5d7", 
                                "RPF_only" = "#aa65a4", 
                                "#878787"),
                     breaks = c("mRNA+RPF_both","mRNA_only","RPF_only"))

气泡散点图

  • 「气泡热图」
    「散点」+不同散点「大小」「颜色映射」
    气泡热图也是一样,只是散点的「坐标」不是「数字」而是'名称'。

气泡热图1

「详细教程」这图怎么画| 气泡热图(基因表达泛癌分析)

「核心代码:」

ggplot(data,aes(x=type ,y= gene)) +  # 点的位置,即(x, y) 注意此时皆不是数值变量
  geom_point(aes(size=-log10(pvalue), fill=Log2FC),
             shape=21, 
             color="black") +  # 需要的映射
  scale_fill_gradient2(name = 'Log2FC\n(Expression)', # 色阶图例名称
                       limit = c(-1.001,1.001), # 色阶图例范围
                       breaks = c(-1.0,-0.5,0.0,0.5,1.0), # 色阶图例间距
                       low='#444283', # 颜色设置
                       high='#943934', 
                       mid="white", 
                       midpoint = 0)+  # 中间颜色对应值
  scale_size_continuous(name = '-Log10 qvalue', # 大小图例名称
                        limit = c(-0.001,3.1), # 大小图例范围
                        breaks = c(0,1,2,3))+# 大小图例间距
  geom_hline(yintercept=c(5.5, 10.5))
  • 「相关型热图」
    「散点」+不同散点「大小映射」
    同样,该类型的散点的「坐标」不是「数字」而是'名称'。
    当然,此图的散点并不是主体,颜色的映射由方块完成。

气泡热图2

「详细教程」这图怎么画| 相关性热图+柱状图

「核心代码:」

ggplot()+
  geom_tile(data = df_cor_long,
            mapping = aes(sample,indicator,fill = value))+ # 方块填充颜色映射
  scale_fill_gradient2(name = 'Correlation',
                       limit = c(-1.001,1.001),
                       breaks = c(-1.0,-0.5,0.0,0.5,1.0),
                       low = '#2ab49b',
                       mid = 'white',
                       high = '#ea7f58')+
  geom_point(data = df_imp_long,
             mapping = aes(sample,indicator,size = value), # 散点大小映射
             shape = 1,
             stroke = 0.6,
             color = 'black')+
  scale_size_continuous(name = 'Importance(%)',
                        limit = c(-0.001,15.1),
                        breaks = c(0,5,10,15))

总结

以上就是我根据【木舟笔记】公众号的「历史推文」以及「读者提问」整理的一些散点图及其变体的作图逻辑。当然图形的表达方式千变万化,本人也是才薄智浅不可能巨细无遗。这里我就抛砖引玉一下,欢迎各位读者朋友补充完善。

往期内容

  1. 资源汇总 | 2022 木舟笔记原创推文合集(附数据及代码领取方式)
  2. CNS图表复现|生信分析|R绘图 资源分享&讨论群!
  3. 这图怎么画| 有点复杂的散点图
  4. 这图怎么画 | 相关分析棒棒糖图
  5. 组学生信| Front Immunol |基于血清蛋白质组早期诊断标志筛选的简单套路
  6. (免费教程+代码领取)|跟着Cell学作图系列合集
  7. Q&A | 如何在论文中画出漂亮的插图?
  8. 跟着 Cell 学作图 | 桑葚图(ggalluvial)
  9. R实战 | Lasso回归模型建立及变量筛选
  10. 跟着 NC 学作图 | 互作网络图进阶(蛋白+富集通路)(Cytoscape)
  11. R实战 | 给聚类加个圈圈(ggunchull)
  12. R实战 | NGS数据时间序列分析(maSigPro)
  13. 跟着 Cell 学作图 | 韦恩图(ggVennDiagram)
相关文章
|
数据可视化
R语言绘图教程丨Nature论文都在用的多组比较箱线图,自动计算显著性并标注,附带误差线
R语言绘图教程丨Nature论文都在用的多组比较箱线图,自动计算显著性并标注,附带误差线
R实战 | 对称云雨图 + 箱线图 + 配对散点 + 误差棒图 +均值连线
R实战 | 对称云雨图 + 箱线图 + 配对散点 + 误差棒图 +均值连线
2022 1
R实战 | 对称云雨图 + 箱线图 + 配对散点 + 误差棒图 +均值连线
|
数据挖掘
跟着 Nature 学作图 | 相关性热图(显示相关性散点图)
跟着 Nature 学作图 | 相关性热图(显示相关性散点图)
1011 0
|
存储 自然语言处理 搜索推荐
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
向量数据库结合ChatGPT带来了什么 1. **语义搜索:** 使用向量数据库进行语义搜索,可以更准确地找到与查询相关的信息。ChatGPT可以理解用户的自然语言查询,而向量数据库可以根据语义相似性返回匹配的向量数据。 2. **智能推荐:** 结合ChatGPT的智能理解和向量数据库的相似性搜索,可以实现更智能的推荐系统。系统可以根据用户的历史行为和语境,向用户推荐相似的向量数据,如文章、产品或其他内容。 3. **自然语言处理与向量表示结合:** ChatGPT可以将自然语言转换为向量表示,这样就可以在向量数据库中进行更高效的查询。这种集成使得自然语言处理和向量数据库可以相互补充等
998 0
ChatGPT 文本Embedding融合Qdrant向量数据库:构建智能问答系统的技术探索
|
监控 算法
偏最小二乘(Partial Least Squares,PLS)原理及模型建立
偏最小二乘(Partial Least Squares,PLS)原理及模型建立
偏最小二乘(Partial Least Squares,PLS)原理及模型建立
|
5月前
|
Prometheus 监控 数据可视化
模型被挤了?立即查看服务器GPU/CPU占用,别再误杀他人进程!
模型在服务器上跑得好好的,突然就“卡”了甚至被挤掉?别急着抱怨!本文手把手教你如何优雅地查看共享服务器的CPU和GPU占用情况,学会做一个有素质的“共享玩家”,告别模型被挤的尴尬!文末还有硬核忠告和Linux学习建议。
966 87
|
9月前
|
人工智能 搜索推荐 测试技术
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
481 11
|
9月前
|
人工智能 自然语言处理 程序员
体验通义灵码的AI程序员:用Python+Tkinter实现表单向config.ini写入与读取
本文介绍了如何利用通义灵码的AI程序员快速开发一个基于Python和Tkinter的表单应用程序,实现对config.ini文件的读写。通过简单的自然语言描述,通义灵码能自动生成代码框架、自动补全功能代码,并提供错误检测与修复建议,极大提高了开发效率。开发者只需安装必要库(如configparser)并配置VSCode插件TONGYI Lingma,即可轻松创建包含多个输入项和按钮的表单界面。运行程序后,用户可以编辑表单并保存数据到config.ini文件中,再次启动时数据会自动加载显示。这一过程展示了AI在编程中的高效性和灵活性,为开发者提供了全新的开发方式。
396 3
|
数据挖掘 索引 Python
数据分析缺失值处理(Missing Values)——删除法、填充法、插值法
数据分析缺失值处理(Missing Values)——删除法、填充法、插值法
1841 2
vscode 生成项目目录结构 directory-tree 实用教程
vscode 生成项目目录结构 directory-tree 实用教程
1554 2