R语言使用ggplot2包绘图

news/2024/11/22 8:22:11/

使用ggplot2包绘图

  • 设置
    • 绘图显示中文 showtext_auto()
    • 查看并设置字体 windowsFonts()
    • 设置标题
    • 添加公式 expression()
    • 绘图添加文本 geom_text(); annotate()
    • 绘图添加回归方程, R2, 显著性P值
    • 修改横坐标轴刻度 scale_x_continuou()
    • 添加竖线、横线、对角线geom_hline(), geom_vline(), geom_abline()
    • 调整图例的颜色
    • 设置主题 theme()
    • 输出图片ggsave()
  • 画图
    • 画直方图 geom_histogram()
    • 绘制条形(柱状)图 geom_bar(),geom_col()
    • 画散点图 geom_point()
    • 画散点图并添加相关性标注 ggscatter()
    • 画带带误差阴影的折线图geom_line()
    • 画相关性矩阵 ggcorrplot()

设置

绘图显示中文 showtext_auto()

library (showtext)
showtext_auto()

查看并设置字体 windowsFonts()

# 查看字体
windowsFonts()# 定义字体名称
windowsFonts(myFont = windowsFont("微软雅黑"))# 使用字体
#修改坐标轴和legend、标题的字体
theme(text=element_text(family="Arial"))
#或者
theme_bw(base_family="Arial")
#修改geom_text的字体
geom_text(family="Arial")

参考链接:
R语言学习 - 图形设置中英字体
https://zhuanlan.zhihu.com/p/442648746
R语言中作图字体的设置
https://blog.csdn.net/qq_18055167/article/details/123646961


设置标题

# 添加标题
labs(x = 'x轴标题', y = 'y轴标题' ,title = '标题' )
xlab('x轴标题')
ylab('y轴标题')
ggtitle("主标题", subtitle = "副标题")# 调整标题的位置
theme(plot.title = element_text(color = 'red', size = 20, hjust = 0.5))                       # 标题居中
theme(plot.title = element_text(color = 'red', size = 20, hjust=0.5, vjust = -15))      # 通过vjust参数将标题调整到图形内部。
参考链接:
# Tidyverse自学笔记-ggplot2之图形标题
https://zhuanlan.zhihu.com/p/545306833
# 玩转数据可视化之R语言ggplot2:(七)对图形添加注释和标签(包含标题、坐标轴、参考线和高亮等注释方法)
https://blog.csdn.net/weixin_45052363/article/details/124153241
# R语言ggplot如何添加图例?(讲的很多,  绘图的很多基础设置都讲了)
https://www.zhihu.com/question/267400251/answer/2454390967

添加公式 expression()

# 下面示例添加上标 ^,如果想添加下标使用 []
labs(x = expression('Leaf_area_obs'~(cm^2)), y =  expression('Leaf_area_pred'~(cm^2))) +  

绘图添加文本 geom_text(); annotate()

  • 添加多个标注 geom_text(), 可以通过数据框的变量传递位置
p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) + geom_point() 
p + geom_text(
check_overlap = TRUE, 
aes(colour = factor(cyl)),
size = 3, 
family = "serif",
hjust = 'left', vjust = 'top',
nudge_x = 0.5, nudge_y = 0
)       
# 为散点图每个点都添加文本标注
# check_overlap 设置是否重叠
# size 设置文本尺寸
# hjust和vjust 设置水平对齐(0:右/上,1:左/下), 或者使用字符("left", "middle", "right", "bottom", "center", "top"). 或者"inward"和"outward"
# nudge_x 和 nudge_x 设置沿着水平和垂直调整以微调标签。用于从点偏移文本。
# family 设置字体
# parse = TRUE 设置是否显示表达式p + geom_label()      # 每个标注文本带文本框
  • 为指定的位置添加一个文本标注 annotate(), xy位置直接通过数值指定(坐标轴的绝对位置)
    annotate() 功能比较多,还能使用线条和阴影标注
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()# 指定位置添加文本标注    # 可以使用-Inf或Inf设置xy位置的边缘
p + annotate("text", x = 4, y = 25, label = "Some text")   # 指定位置标注多行文本, 使用 \n 换行
p + annotate("text", x = 4, y = 25, label = "text1\ntext2")   # 还能使用geom_text()的一些参数设置标注的颜色, 字体, 大小, 对齐
p + annotate("text", x = 4, y = 25,  label = paste0("text1=", "123" ,"\n", "text2=", "45" ) ,size = 5,colour = "red", family = "serif", hjust = 'left', vjust = 'top')# 指定位置标注公式, 使用参数 parse = TRUE
p + annotate("text", x = 4, y = 25, label = "italic(R) ^ 2 == 0.75",  parse = TRUE)
  • 此外还能使用grid.text() 在面板上标注文本,使用相对位置[0,1]
    library(grid), grid.text()

一些暂未解决的问题

  • 不会使用换行符标注两行公式,
    公式只能标注一行(可能是我不会设置)

使用atop应该可以换行公式

  • 2行公式换行用atop还好, 超过2行就开始出现各种问题, >2行公式换行不建议使用,还是老老实实的一行行的添加吧
plot(c(1,2,3,4,5))
# 使用substitute()函数替换变量, 写公式的atop()函数给公式换行(只能两行).  atop()只能传递两个参数,分别表示一行,没有换行符
exp1 <- substitute(atop(italic(y) == a + b %*% italic(x), italic(R) ^ 2 == r2),list(a = 1, b = 2, r2 = 0.9) )
text(1, 3, label = exp1, adj = 0, col = "red")# 标注三行公式只能嵌套使用atop了,  atop(atop(a1, a2),a3)形式的第三行字体大小不一致. 所以使用atop(atop(a1, a2),atop(a3))形式
exp2 <- substitute(atop(atop(italic(y) == a + b %*% italic(x), italic(R) ^ 2 == r2), atop(italic(P) == p, phantom(0) ) ),list(a = 1, b = 2, r2 = 0.9, p = 0.01) )
text(2, 3, label = exp2, adj = 0, col = "red")# 此外, 会发现三行公式是居中显示的, 如果想左对齐,只能用phantom(0)占位补成相同长度.
exp3 <- substitute(atop(atop(italic(y) == a + b %*% italic(x), italic(R)^2 == r2 ~ phantom(10)), atop(italic(P) == p ~ phantom(10), phantom(0))),list(a = 1, b = 2, r2 = 0.9, p = 0.01)
)
text(3, 3, label = exp3, adj = 0, col = "red")

参考链接:
R语言ggplot2添加单个文本或多个文本(包括公式)
https://blog.csdn.net/cfc424/article/details/126759163
R作图之 annotation详解!
https://blog.csdn.net/g_r_c/article/details/19673625
R语言基础绘图——注解
https://shengxin.ren/article/129
R语言绘图中的公式怎么换行?
https://www.zhihu.com/question/469560125


绘图添加回归方程, R2, 显著性P值

  • 可以自行计算按照上面添加标注(公式)的方法添加
  • 还可以使用一些包
  1. R语言笔记——ggplot2画回归曲线,添加方程或P值 (使用ggpmisc包的stat_poly_eq)
    https://wap.sciencenet.cn/home.php?mod=space&do=blog&id=1212579
#加载ggpmisc包
library(ggpmisc) # 添加回归曲线,se取消置信空间,linetype设置线型
geom_smooth(method = "lm",linetype=3, se=FALSE, colour="black", span=0.8) + 
#添加回归方程和R2
stat_poly_eq(aes(label = paste(..eq.label.., ..adj.rr.label.., sep = '~~~~')), 
formula = y ~ x, 
parse = T, family = "SH") + # 仅添加R2和P值,label.x和label.y设置文字位置
stat_fit_glance(method = 'lm',
method.args = list(formula = y ~ x),
mapping = aes(label = sprintf('R^2~"="~%.3f~~italic(P)~"="~%.2g', stat(r.squared), stat(p.value))),
parse = TRUE, label.x = 0.95, label.y = 0.95, family = "SH")+
  1. 使用的ggpubr包的stat_cor()
# Load data
data("mtcars")
df <- mtcars
df$cyl <- as.factor(df$cyl)# Scatter plot with correlation coefficient
#:::::::::::::::::::::::::::::::::::::::::::::::::
sp <- ggscatter(df, x = "wt", y = "mpg",add = "reg.line",  # Add regressin lineadd.params = list(color = "blue", fill = "lightgray"), # Customize reg. lineconf.int = TRUE # Add confidence interval)
# Add correlation coefficient
sp + stat_cor(method = "pearson", label.x = 3, label.y = 30)# Specify the number of decimal places of precision for p and r
# Using 3 decimal places for the p-value and
# 2 decimal places for the correlation coefficient (r)
sp + stat_cor(p.accuracy = 0.001, r.accuracy = 0.01)# Show only the r.label but not the p.label
sp + stat_cor(aes(label = ..r.label..), label.x = 3)# Use R2 instead of R
ggscatter(df, x = "wt", y = "mpg", add = "reg.line") +stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "~`,`~")),label.x = 3
)

修改横坐标轴刻度 scale_x_continuou()

scale_x_continuous(limits = c(-5,15)# 设置最大和最小值breaks = seq(0, 50, 1))  # 0-50每个1设置一个刻度xlim(0,6000)   # 直接使用xlim也可

添加竖线、横线、对角线geom_hline(), geom_vline(), geom_abline()

画横线:geom_hline(yintercept = 5 )
画竖线:geom_vline(xintercept = 20)
画斜线:geom_abline(intercept = 0, slope = 1, linetype =“longdash”, size=0.5) # 画对角线


调整图例的颜色

ggplot2包中对配色系统主要通过以下几个函数实现:
参考链接:https://blog.csdn.net/qq_18055167/article/details/123512967

数值型

  • scale_colour/fill_coninuous()
  • scale_fill_distiller()
  • scale_colour/fill_gradient()
  • scale_colour/fill_gradient2()
  • scale_colour/fill_gradientn()

类别型

  • scale_colour/fill_discrete()
  • scale_colour/fill_brewer()
  • scale_colour/fill_manual()

其中,colour表示轮廓色度量,fill表示填充色度量


调色板介绍
参考链接:https://blog.csdn.net/weshengxin/article/details/126006349
3 类调色板各有特色:

  • 连续型(sequential):单渐变色,一种颜色由浅到深。
  • 离散型(divergent):双渐变色,一种颜色到另外一种颜色的渐变。
  • 定性型(qualitative):区分色,几种区分度很高的颜色组合。
# 显示所有面板
display.brewer.all(n=NULL, type="all", select=NULL, exact.n=TRUE, colorblindFriendly=FALSE)

变量的类型
参考链接:https://blog.csdn.net/Allenmumu/article/details/119532449

  1. 分类(分组)变量。变量可以进一步指定为名义、有序和二元(二分)。分类变量使用定性调色板。
  2. 连续变量。连续变量使用连续或发散调色板。

(1)调整单一颜色

  1. 可以指定为单色也可以赋值给变量。通常使用在geom_*(color = “blue”)。注意只有变量才会在aes()中使用。
  2. color(轮廓颜色),fill(填充颜色)。

(2)分类变量颜色调整

  1. 手动选择颜色使用函数
    scale_color_manual()
  2. 使用内置的定性调色板,使用函数
    scale_color_brewer()
  3. 使用扩展包中的调色板,例如:
    library(ggsci)
    scale_color_aaas()
    scale_color_npg()

(3)数值变量颜色调整
定量变量表示可测量的数量,因此是数字变量。定量数据可以进一步分类为连续(可能是浮点数)或离散(仅限整数)。
函数 scale_color_gradient() 是一个顺序梯度,
而 cale_color_gradient2() 是发散的。

  1. 连续变量默认配色方案,单色渐变,
    scale_color_continuous()

  2. 手动设置顺序配色方案,
    scale_color_gradient(low = “white”, high = “black”)
    发散的配色方案,
    scale_color_gradient2(low = “red”, mid = “white”, high = “blue”)
    使用R预设调色板,
    scale_color_gradientn(colours =rainbow(10))

  3. 将ColorBrewer的颜色应用到连续变量上。
    scale_color_distiller(palette = “Spectral”)

  4. ggplot2中的 Viridis 调色板(好看,比较实用)
    scale_color_viridis_c()
    scale_color_viridis_c(option = “inferno”)
    scale_color_viridis_c(option = “plasma”)
    scale_color_viridis_c(option = “cividis”)

  5. 使用扩展包中的调色板
    racrtocolors包
    scale_color_carto_c(palette = “BurgYl”)
    scale_color_carto_c(palette = “Earth”)


设置主题 theme()

输出图片ggsave()

path_s = "D:/Figure/" 
ggsave(paste0(path_s, 'box', '.tiff'), Figure, width = 10, height = 7, units = c("cm"), dpi = 600)

画图

画直方图 geom_histogram()

参考博文:

  • 语言ggplot2统计图形:常见的4种直方图
    (https://zhuanlan.zhihu.com/p/484533343)
# 使用geom_histogram自定义
P <- ggplot(data, aes(var)) 
P + geom_histogram(fill = "darkgrey",color="white") +scale_x_continuous(breaks = seq(0, 50, 1)) # 让每个bin的两侧都显示标注
P + geom_bar() + scale_x_binned() 

绘制条形(柱状)图 geom_bar(),geom_col()

有两种类型的柱状图:geom_bar()和geom_col()。

  1. geom_bar()
    使柱状图的高度与每组的个数成正比(如果提供了权重美学,则为权重之和)。geom_bar()默认使用stat_count():它计算每个x位置的个数。
  2. geom_col()
    如果你想让条形图的高度代表数据中的数值,请使用geom_col()。geom_col()使用stat_identity():它让数据保持原样。
  • geom_bar() 柱子表示分类的个数
g <- ggplot(mpg, aes(class))# 绘制柱状图
g + geom_bar()# 横向绘图 geom_bar(aes(y = class))
ggplot(mpg) + geom_bar(aes(y = class))
# 或者翻转坐标轴 coord_flip() 
g + geom_bar() + coord_flip() # 堆叠
g + geom_bar(aes(fill = drv))
# 堆叠后横向
ggplot(mpg, aes(y = class)) +geom_bar(aes(fill = drv), position = position_stack(reverse = TRUE)) +theme(legend.position = "top")
  • geom_col() 柱子表示数值
df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2))
ggplot(df, aes(trt, outcome)) +geom_col()
  • 柱状图添加误差棒 geom_errorbar()
D.se <- summarySE(D, measurevar = 'seed_setting_rate', groupvars=c('genotype', 'treatment'), na.rm = TRUE) P <- ggplot(D.se , aes(x = genotype, y = seed_setting_rate, fill = treatment)) +geom_errorbar(aes(ymax = seed_setting_rate + se, ymin = seed_setting_rate - se),position = position_dodge(0.9), width = .8, size = .2) +geom_bar(stat="identity", position="dodge") +mytheme  
P
path = "G:/F/work_RuGao_WYL_2022/Phenotype/Figure/maturity/"
ggsave(paste0(path,'bar_','seed_setting_rate','.tiff'), P, width = 20, height = 10,units = c("cm"), dpi = 600)
  • 对柱子排序,根基y数值大小对x排序 reorder()
    ggplot( mapping = aes(x = reorder(gene, coef), y = coef) )
参考博文:- 构建了新函数summarySE,计算平均值和标准差,添加了误差棒https://www.zhangshengrong.com/p/ArXGbnrENj/- 添加了文本标注
https://zhuanlan.zhihu.com/p/38412409- 每天一个R函数之reorder (柱状图的柱子进行排序)
https://zhuanlan.zhihu.com/p/511112576- R语言绘制带误差线的条形图
https://www.zhangshengrong.com/p/ArXGbnrENj/- 语言柱形图(ggplot2)基本操作常用记录(横向排列)
https://blog.csdn.net/weixin_42574470/article/details/125781458

画散点图 geom_point()

library(ggplot2)P <- ggplot(df_merge,aes(lA_3D_cm, Leaf_area_sum)) + geom_point() +  geom_smooth(se = T, method = 'lm', size = 0.5, colour = 'black',fill = 'gray') + # 绘制拟合曲线和阴影stat_cor(method = "pearson",label.x.npc = 0, label.y.npc = 1, color='red', r.accuracy=0.01, p.accuracy=0.01) +scale_x_continuous( limits = c(0, 550), breaks = seq(0, 550, 100)) + labs(x = expression('Leaf_area_radar'~(cm^2)), y =  expression('Leaf_area_Li3000'~(cm^2))) +  theme_bw()
P
path = "D:/"
ggsave(paste0(path,'scat_Leaf_area','.tiff'), P, width = 10, height = 9, units = c("cm"), dpi = 600)

画散点图并添加相关性标注 ggscatter()

  • 参考链接:
    R语言绘图小技巧篇-添加相关系数
    https://www.jianshu.com/p/baf4ed9563b3
# ggplot2中的绘图设置函数都能配合使用,比如labs(), theme()等
library(ggcorrplot) 
library(ggplot2)
data(mtcars)
df <- mtcars
df$cyl <- as.factor(df$cyl)F <- ggscatter(df, x = "wt", y = "mpg", add = "reg.line", conf.int = TRUE,  size=1.5,add.params = list(fill = "gray"), ggtheme = theme_bw()) + stat_cor(method = "pearson", label.x.npc = 0, label.y.npc = 1,color='red',r.accuracy=0.01, p.accuracy=0.01)
F 
path = "D:/"
ggsave(paste0(path,'ggscatter','.tiff'), F, width = 10, height = 9, units = c("cm"), dpi = 600)

画带带误差阴影的折线图geom_line()

参考链接:

  • 【R语言系列02】PLOT GGPLOT作图,标注虚线,标注文本,添加阴影误差带
    (https://www.freesion.com/article/98321370899/)

画相关性矩阵 ggcorrplot()

参考链接:
R语言绘制相关性热图(相关性图)多种方法盘点,包你一学就会!( https://zhuanlan.zhihu.com/p/458889477 )

  • 使用ggcorrplot包
library(ggcorrplot)
library(ggplot2)
# 使用默认的方案绘图
ggcorrplot(cormtcars)  # 使用自定义方案绘图
cor <- round(cor(mtcars), 2)  # R自带的cor()函数计算相关性矩阵,round()保留两位小数
pmtcars <- cor_pmat(mtcars)   # 使用ggcorrplot包的cor_pmat()函数计算p值
P <- ggcorrplot(cor, method = "circle",   # 使用圆形表示每个相关性,默认是方形type = "upper",               # 只显示上三角lab = T, lab_size = 3,        # 显示相关性标注,调整字体大小p.mat = pmat, insig = "blank",  # pmat表示前面计算的显著性P的矩阵, "blank"表示显著性小于0.05的相关性不显示,默认是打叉号                    # hc.order = TRUE    # 分等级聚类重排矩阵,通俗讲就是把相关性按照高低或者正负堆在一块) 
P  
# 保存图片
path_s = "D:/" 
ggsave(paste0(path_s,'cor', '.tiff'), P, width = 20, height = 20, units = c("cm"), dpi = 600)

还可以使用以下包:

  • corrplot包,
  • corrgram包,
  • PerformanceAnalytics包,
    (https://blog.csdn.net/S_S0318/article/details/115959945)
  • ggplot2包以及pheatmap包绘制热力图 (https://blog.csdn.net/weixin_39646107/article/details/111298026)


http://www.ppmy.cn/news/965510.html

相关文章

R语言中强大的作图软件包ggplot2

R语言两大底层绘图系统 grid 图形系统可以很容易地控制图形基础单元&#xff0c;给予编程者创作图形极大的灵活性。grid 图形系 统还可以产生可编辑的图形组件&#xff0c;这些图形组件可以被复用和重组&#xff0c;并能通过 grid.layout()等函数&#xff0c; 把图形输出到指定…

[R语言]手把手教你如何绘图(万字)

目录 概况 常用高级图形 条形图 csv文件导入 csv文件导出 R语言sep函数 seq函数 with函数 直方图和密度估计图 盒型图 boxplot() 正态QQ图 散点图 pairs()散点矩阵图 曲线图 curve() 三维图 动态三维图 低级图形函数 abline() lines() legand()增加图例 …

CHAP7:使用 R 编程进行数据分析

1.了解 R 的基础知识 R 是一种编程语言&#xff0c;可用于在数据分析过程的每个阶段执行任务。在这部分课程中&#xff0c;您将了解 R 和 RStudio&#xff0c;这是 R 的集成开发人员环境 (IDE)。您将探索使用 RStudio 与 R 一起工作的好处。RStudio 使您能够轻松利用 R 的特性…

R语言常用代码(入门)

R语言常用代码 基本命令 q()&#xff1a;退出R程序 tab&#xff1a;自动补全 ctrlL&#xff1a;清空工作环境 ESC&#xff1a;中断当前计算 head(X)&#xff1a;查看数据集前6行数据 tail(X)&#xff1a;查看数据集尾6行数据安装所需要的包 # 安装包 install.packages("…

R语言---使用RTCGA包获取TCGA数据---笔记整理

原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzAxMDkxODM1Ng&mid2247486585&idx1&sn3035f6420904aad2c8161b362cdeb472&chksm9b484cc2ac3fc5d479fc5bce3d68d4666b763652a21a55b281aad8c0c4df9b56b4d3b353cc4c&scene21#wechat_redirect 1.RTCGA…

写一个用r语言分层抽样算积分的代码——chatgpt版

目录 一、写一个用r语言分层抽样算积分的代码二、写一个用r语言分层抽样f(x)exp(x)算积分的代码三、写一个用r语言分别用随机投点法、平均估计法重要抽样法和分层抽样计算f(x)exp(x)积分的代码四、写一个用r语言分别用随机投点法、平均估计法重要抽样法和分层抽样计算f(x)exp(x…

一脉相通!聊聊 ChatGPT 发展路线

作者 | 上衫翔二 整理 | NewBeeNLP 大家好&#xff0c;这里是 NewBeeNLP。 首页最近被chatGPT刷屏&#xff0c;但翔二博主左看右看发现很多想法似乎都是一脉相通的&#xff0c;于是连夜从存档中找了一些文章尝试理一理它的理论路线。 具身智能综述和应用&#xff08;Embodied …

AI是超越还是桎梏?从ChatGPT到5G+AI,我们在聊什么?

从家常里短聊到科技创新&#xff0c;从人文故事探讨到物理科学&#xff0c;诞生2个月用户即破亿的ChatGPT正成为火爆全球的AI应用工具&#xff0c;其强大的能力超乎人们想象。这款几乎博学多识的聊天机器人能运用AI系统进行简洁的交流&#xff0c;完成各种指令信息的表达。面对…