使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图

      大家好,我是带我去滑雪!

      一幅精美的科研绘图会有诸多益处,精美的图像可以更好地传达研究结果和数据分析的重要信息。通过使用清晰、直观和易于理解的图像,可以更好地向读者展示研究的发现,有助于读者理解和解释数据。还可以增加研究报告或论文的可视化效果,使其更具吸引力和可读性。在学术界中,精美的图像常常吸引编辑和评审人员的注意,并提高研究发表的机会。此外,在学术会议或研究展示中展示精美图像也有助于引起其他研究者的兴趣和讨论。

     本文分别介绍使用R语言中的ggplot包绘制气泡图、使用ComplexHeatmap包绘制带有显著性标记的热力图以及使用ggplot2包绘制渐变曲线图。

目录

1、使用ggplot绘制气泡图

(1)设置工作路径、安装并调用相关包

(2)导入数据

(3)绘制气泡图

2、使用ComplexHeatmap包绘制带有显著性标记的热力图

(1)安装并调用相关包

(2)导入数据集

(3)计算相关系数,并将结果中的P值替换为显著性标记

3、绘制渐变曲线图

(1)安装并调用包、导入数据

(2)绘制曲线图

(3)为图片添加渐变效果


1、使用ggplot绘制气泡图

(1)设置工作路径、安装并调用相关包

rm(list=ls())#清除全局环境变量
setwd('E:/工作/硕士/博客/博客39-使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图')
install.packages("ggprism")
library(ggplot2)
library(ggprism)
library(RColorBrewer) 
library(grid)
library(scales)

(2)导入数据

data=read.table("E:/工作/硕士/博客/博客39-使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图/data.csv",header=TRUE,sep=",")
head(data)

输出结果:

        x1  x4   x9  x6
  1     2    0   14   2
  2     4    0   18   0
  3     2    2   18   1
  4     4    3    6    1
  5     3    2    7    2
  6     3    2    5    1

(3)绘制气泡图

ggplot(dd,aes(x1,x2,color=x3,size=x4,fill=x3))+
  geom_point(color="blue",
  #气泡边框色
             shape=21,alpha=0.9)+
  #形状
  scale_size_continuous(range = c(1, 15))+
  #气泡的相对大小
  theme_bw()+
  theme(panel.grid = element_blank(), 
  #添加画布背景
        axis.line=element_line(),
  #坐标轴的线设为显示
        axis.text=element_text(color='black',size=12),
        legend.text = element_text(color='black',size=12),
        axis.title= element_text(size=12),
        axis.text.x=element_text(vjust = 1,hjust = 1),
        legend.key = element_blank())+
  scale_fill_manual(values=c("skyblue1","pink","turquoise1","red","sienna1"))+
  #指定气泡颜色
  labs(x = 'x', # 定义x轴文本
       y = 'y')# 定义y轴文本

#调整背景色
color <- colorRampPalette(brewer.pal(11,"BrBG"))(30)
#添加背景
grid.raster(alpha(color, 0.2), 
            width = unit(1, "npc"), 
            height = unit(1,"npc"),
            interpolate = T)

输出结果:

2、使用ComplexHeatmap包绘制带有显著性标记的热力图

(1)安装并调用相关包

install.packages("ComplexHeatmap")
install.packages("psych")
install.packages("ComplexHeatmap")
install.packages("BiocManager")
install.packages("circlize")
library(psych)
library(BiocManager)
if (!require("BiocManager"))
  install.packages('BiocManager') 
if (!require("ComplexHeatmap"))
  BiocManager::install('ComplexHeatmap') 
library(ComplexHeatmap)
library(circlize)

(2)导入数据集

dd=read.table("E:/工作/硕士/博客/博客39-使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图/data1.csv",header=TRUE,sep=",")
head(dd)

输出结果:

    x1 x2     x3      x4 x5 x6  x7   x8    x9   y1
1  2    2   78.60    0  1    2   1     58   14   210
2  4    2   98.00    0  1    0   1   2337  18  433
3  2    1   58.10    2  1    1   1     25    18  255
4  4    2  118.00   3  0    1   0   2106    6  195
5  3    1   97.70    2  0    2   0  1533     7  150
6  3    2   115.94  2  1    1   1     47      5   570

(3)计算相关系数,并将结果中的P值替换为显著性标记

ct1 <- corr.test(dd,method = "pearson")
#提取相关系数
r2 <- ct1$r
#提取p值矩阵;
p2 <- ct1$p
#使用显著性星号标记进行替换;
p2[p2>=0 & p2 < 0.001] <- "***"
p2[p2>=0.001 & p2 < 0.01] <- "**"
p2[p2>=0.01 & p2 < 0.05] <- "*"
p2[p2>=0.05 & p2 <= 1] <- ""
p2

输出结果:

     x1    x2      x3    x4    x5    x6    x7    x8    x9    y1   
x1 "***" "***" "***" ""    "***" ""    ""    ""    "***" "***"
x2 "***" "***" "***" ""    "***" ""    "*"   ""    "***" "***"
x3 "***" "***" "***" ""    "***" ""    ""    "*"   "***" "***"
x4 ""     "**"   ""    "***" "*"   ""    "*"   "*"   "*"   "***"
x5 "***" "***" "***" "**"  "***" "***" "***" ""    "***" "***"
x6 ""        ""    ""    ""    "***" "***" "**"  ""    ""    ""   
x7 "*"   "***"    ""    "**"  "***" "***" "***" ""    ""    "***"
x8 ""       "*"  "***"  "**"  "**"  ""    ""    "***" "***" "***"
x9 "***" "***" "***" "**"  "***" "*"   ""    "***" "***" "***"
y1 "***" "***" "***" "***" "***" ""    "***" "***" "***" "***"

(4)绘图设置

range(r2)
#颜色映射函数
col_fun1 = colorRamp2(c(-0.1794705, 0, 1), c("#0f86a9", "white", "#FC8452"))
col_fun2 = colorRamp2(c(-0.1794705, 0, 1), c("#A5CC26", "white", "#FF7BAC"))
col_fun3 = colorRamp2(c(-0.1794705, 0, 1), c("#3FA9F5", "white", "#FF931E"))
col_fun4 = colorRamp2(c(-1, 0, 1), c("#ffa500", "white", "#B3A9EB"))
col_fun(seq(-2, 2))

#热图格子大小设置;
cellwidth = 0.7
cellheight = 0.7
cn = dim(r2)[2]
rn = dim(r2)[1]
w=cellwidth*cn
h=cellheight*rn
#绘制热图显示显著性星号标记;
Heatmap(r2,name ="r", col = col_fun2,
        #格子大小设置;
        width = unit(w, "cm"),
        height = unit(h, "cm"),
        rect_gp = gpar(col = "white", lwd = 1.5),
        border_gp = gpar(col = "#0f86a9",lty = 2,lwd = 1.2),
        #聚类树样式设置;
        column_dend_height = unit(1.5, "cm"),
        row_dend_width = unit(1.5, "cm"),
        column_dend_gp = gpar(col = "#0f86a9",lwd = 1.4),
        row_dend_gp = gpar(col = "#0f86a9",lwd = 1.4),
        #设置聚类gap数量和大小;
        row_split = 2, column_split = 2,
        row_gap = unit(2, "mm"),
        column_gap = unit(2, "mm"),
        #行列标签文字样式设置;
        row_title = NULL,column_title = NULL,
        column_names_gp = gpar(fontsize = 8),
        row_names_gp = gpar(fontsize = 8),
        #图例样式设置;
        heatmap_legend_param = list(legend_height = unit(3, "cm"),
                                    grid_width = unit(0.4, "cm"),
                                    labels_gp = gpar(col = "gray20",
                                                     fontsize = 8)),
        #显示星号标记设置;
        #vjust垂直微调星号的位置;
        cell_fun = function(j, i, x, y, width, height, fill) {
          grid.text(p2[i, j], x, y, vjust = 0.7,
                    gp = gpar(fontsize = 13,col="white"))
        })

输出结果:

      换一种样式:

#绘制热图,显示相关性系数,保留两位小数;
Heatmap(r2,name ="r", col = col_fun1,
        #格子大小设置;
        width = unit(w, "cm"),
        height = unit(h, "cm"),
        rect_gp = gpar(col = "white", lwd = 1.5),
        border_gp = gpar(col = "#0f86a9",lty = 2,lwd = 1.2),
        #聚类树样式设置;
        column_dend_height = unit(1.5, "cm"),
        row_dend_width = unit(1.5, "cm"),
        column_dend_gp = gpar(col = "#0f86a9",lwd = 1.4),
        row_dend_gp = gpar(col = "#0f86a9",lwd = 1.4),
        #设置聚类gap数量和大小;
        row_split = 2, column_split = 2,
        row_gap = unit(2, "mm"),
        column_gap = unit(2, "mm"),
        #行列标签文字样式设置;
        row_title = NULL,column_title = NULL,
        column_names_gp = gpar(fontsize = 8),
        row_names_gp = gpar(fontsize = 8),
        #图例样式设置;
        heatmap_legend_param = list(legend_height = unit(3, "cm"),
                                    grid_width = unit(0.4, "cm"),
                                    labels_gp = gpar(col = "gray20",
                                                     fontsize = 8)),
        #显示数值设置;
        #i,j对应数据矩阵的行和列索引;
        #x,y对应热图cell中心点坐标;
        cell_fun = function(j, i, x, y, width, height, fill) {
          grid.text(sprintf("%.2f", r2[i, j]), x, y,
                    gp = gpar(fontsize = 6))
        })

输出结果:

3、绘制渐变曲线图

(1)安装并调用包、导入数据

install.packages("ggplot2")
library(ggplot2) 
setwd('E:/工作/硕士/博客/博客39-使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图')
data=read.table("E:/工作/硕士/博客/博客39-使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图/data2.csv",header=TRUE,sep=",")

(2)绘制曲线图

pdf("plot.pdf",width = 5.5, height = 3.7)
ggplot(data,aes(x=X,y=Y,fill=type))+
  geom_line(color = "#dcedf5")+  #线图
  coord_cartesian(xlim = c(4.5, 110))+ #设置X轴显示范围
  scale_y_continuous(breaks = seq(0,10,2))+ #设置y轴刻度范围和间隔
  scale_x_continuous(breaks = seq(0,100,20))+ #设置x轴刻度范围和间隔
  labs(x="Hz",
       y="Sb")+  #设置坐标轴标题
  theme_bw()+  #设置主题
  theme(panel.grid = element_blank(),  #取消背景网格
        axis.text = element_text(size = 10), #设置刻度值字体大小
        axis.title = element_text(face = "bold") #设置字体
  )+
  geom_segment(aes(x = 55, y = 1, xend = 78, yend = 5),size= 0.3) +
  geom_segment(aes(x = 48, y = 5, xend = 78, yend = 7.5),size= 0.3) +
  geom_segment(aes(x = 46, y = 8, xend = 76, yend = 8.5),size= 0.3) +
  geom_segment(aes(x = 47, y = 9.5, xend = 74, yend = 9.5),size= 0.3) +
  geom_text(aes(x = 87, y = 5, label = "noise"))+
  geom_text(aes(x = 84, y = 7.5, label = "3.3 pW"))+
  geom_text(aes(x = 82, y = 8.5, label = "20 pW"))+
  geom_text(aes(x = 80, y = 9.5, label = "78 pW"))
dev.off()

输出结果:

(3)为图片添加渐变效果

       这里使用 Adobe Illustrator软件进行处理,博主最近也在学习这个软件,可以一起交流!Adobe Illustrator在科研中作为一款专业的矢量绘图软件,可以提供强大的绘图、插图、编辑和设计功能,帮助科研人员创建高质量、专业外观的科学图表、插图、海报和展示资料,以及进行图像修饰和文字设计。它能够满足科研人员对图像设计和编辑的各种需求,并提升研究成果的可视化和呈现效果。

处理后的渐变曲线图:

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:https://pan.baidu.com/s/1E59qYZuGhwlrx6gn4JJZTg?pwd=2138 
提取码:2138 
--来自百度网盘超级会员V5的分享


更多优质内容持续发布中,请移步主页查看。

   点赞+关注,下次不迷路!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3821.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome/Edge 浏览器多账号登录,测试同一业务系统的不同账号角色

文章目录 如何使用多账户&#xff1f;ChromeEdge 虽然说用不同浏览器测试也比较方便、还能顺带测试多浏览器兼容问题…… 但我是开发呀&#xff0c;我只想用我最习惯的谷歌浏览器完成快速开发&#xff0c;把功能铺上&#xff0c;专注于业务逻辑的开发 这些浏览器差异等只会给我…

chatgpt赋能python:开方在Python中的用法

开方在Python中的用法 开方是数学中常见的一种运算&#xff0c;用于求一个数的平方根。在Python中&#xff0c;开方运算可以通过使用math模块中的sqrt函数来实现。本文将介绍开方运算的概念、Python中的应用以及一些常见问题的解决方法。 开方的概念 开方是指&#xff0c;对…

Yolov5-Face 原理解析及算法解析

YOLOv5-Face 文章目录 YOLOv5-Face1. 为什么人脸检测 一般检测&#xff1f;1.1 YOLOv5Face人脸检测1.2 YOLOv5Face Landmark 2.YOLOv5Face的设计目标和主要贡献2.1 设计目标2.2 主要贡献 3. YOLOv5Face架构3.1 模型架构3.1.1 模型示意图3.1.2 CBS模块3.1.3 Head输出3.1.4 stem…

java连接数据库的5种方式

方式一直接导入第三方库驱动类 这种加载方式在jdbc入门时已经用过&#xff0c;这个driver属于第三方库&#xff0c;。为静态加载&#xff0c;灵活性差&#xff0c;依赖性抢 方式二使用反射机制获取 方式一和方式二代码 package com.hsp.edu;import com.mysql.cj.jdbc.Driver;i…

【IP地址与子网掩码】网络杂谈(19)之IP地址分类与子网掩码的概念

涉及知识点 什么是子网掩码&#xff0c;IP地址的分类&#xff0c;子网掩码的概念&#xff0c;深入了解子网掩码与IP地址,A类&#xff0c;B类&#xff0c;C类&#xff0c;D类&#xff0c;E类ip地址范围。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可…

数据库大题

(计算题&#xff0c;20分) 设有两个关系R和S,求① R ∪ S R \cup S R∪S;② R − S R - S R−S;③ R S R \times S RS;④ ∏ C , A ( R ) \prod_{C,A}(R) ∏C,A​(R);⑤ σ B > ′ 4 ′ ( R ) \sigma_{B>4}(R) σB>′4′​(R) 关系R关系S (简答题&#xff0c;10…

图像基本操作

图像基本操作 环境配置地址&#xff1a; Anaconda:https://www.anaconda.com/download/ Python_whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv IDE:按照自己的喜好&#xff0c;选择一个能debug就好 数据读取-图像 cv2.IMREAD_COLOR&#xff1a;彩色图像cv2.IM…

原生JS实现图片裁剪功能

功能介绍&#xff1a;图片通过原生input上传&#xff0c;使用canvas进行图片裁剪。 裁剪框限制不允许超出图片范围&#xff0c;图片限制了最大宽高&#xff08;自行修改要的尺寸&#xff09;&#xff0c;点击确认获取新的base64图片数据 注&#xff1a;fixed布局不适用该方案&…

JDK8新特性-下部

文章目录 一、Stream结果收集1.1 结果收集到集合中1.2 结果集收集到数组中1.3 对流中数据做聚合运算1.4 对流中数据做分组操作1.5 对流中的数据做分区操作1.6 对流中的数据做拼接 二、并行的Stream流2.1 串行的Stream流2.2 并行流2.2.1获取并行流2.2.2 并行流操作 2.3 串行流与…

arcgis js 通过某一个经纬度 定位报错,并且图标变得很大【已解决】

报错 svg.js:42 Error: attribute transform: Expected number, “…0000,0.02102085,NaN,NaN)”. svg.js:49 Error: attribute x: Expected length, “NaN”. svg.js:49 Error: attribute y: Expected length, “NaN”. 图标特别大&#xff0c;也看不到地图 分析 这个方法中…

vhost-net-原理-初始化流程-数据传输流程-vhost-net后端

文章目录 1.vhost net2.vhost-net的初始化流程vhost net设置vhost dev设置vhost vring设置 3.数据收发流程分析3.1 数据发送3.2 数据接收 4ioventfd和irqfd的通知机制4.1ioeventfdqemu侧kvm侧总体效果 4.2irqfdqemu侧kvm侧总体效果 参考&#xff1a; 1.vhost net 传统的virtio…

linux eventfd事件通知 比信号量更好用

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 概述 原理简介 使用场景 接口说明 头文件 参数说明 代码演示 默认参数 …