R语言学习笔记-Day5

2024-07-07 00:15:11 浏览数 (2)

代码语言:r复制
plot(iris[,1],iris[,3],col=iris[,5])
text(6.5,4, labels = 'hello')
代码语言:r复制
library(ggpubr)
p = ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species",shape = "Species",add = "jitter");p
代码语言:r复制
my_comparisons <- list(c("setosa","versicolor"),
                        c("setosa","verginica"),
                        c("versicolor","verginica"))
p   stat_compare_means(comparisons = my_comparisons,
                        aes(label = after_stat(p.signif)))

1 R语言画图

1.1 常用可视化R包和函数

作图:base, ggplot2, ggpubr

拼图:par里的mfrow, grid.arrange, cowplot, patchwork

导出:经典三段论、ggsave、eoffice-topptx

#ggsave服务于ggplot2

#eoffice可将图导出为ppt内可编辑元素

1.2 基础包(base)-绘图函数

高级/低级绘图函数

#高级绘图函数可独立于其它函数,低级绘图函数:用于在图中添加元素

高级绘图函数:

低级绘图函数:

plot(iris,1,iris,3,col=iris,5) text(6.5,4,labels = "hello") #plot()和text()分别为高级/低级绘图函数,须一起运行,单独运行text()则无法运行

1.3 ggplot2与ggpubr

ggplot2:

灰色背景

ggpubr:

ggplot2青春版,图片好看一些,ggplot2也可以用代码进行调整

1.4 ggplot2语法

1.4.1 入门级绘图模板

ggplot(data = <DATA>)

  • <GEOMFUNCTION>(mapping = aes(<MAPPINGS>)) #MAPPINGS:映射 #需要:作图数据、横纵坐标 #可用ggplot2作图的函数均以geom命名,代表不同图像 #<MAPPING>处输入x = ,y = 行/列名,无需加"" #行/列名不带引号,函数间写“ ”

1.4.2 属性设置

统一设置

颜色:color:字符串,blue, red等;

大小:size:单位mm;

形状:shape:0:20代表不同形状,以编号表示;

透明度:alpha;

填充颜色:fill

#统一设置需为有意义的值

示例:

ggplot(data = iris) geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length), color = "blue", #颜色为蓝色 size = 5, #点的大小5mm alpha = 0.5, #透明度为50 % shape = 8) #点的形状

映射:按照数据框的某一列定义某个属性

#可以将点设置成多个颜色,与数据对应,而非统一颜色

#统一设置时的参数从属于geom_function(),输入值为"颜色"(可设置为多个颜色,但不建议);映射的参数从属于aes(),输入值为行名

#自行指定映射的具体颜色

scale_color_manual(value=c("color","color")) ##必须先有aes(color) ###可用16进制颜色编码进行指定 ###也可用色彩R包paletteer

#图形分类关系与设置颜色参数

空心(无填充):color;实心(无边框):color;双色(边框 填充):color fill

##设置方法与设置颜色相同,在aes()中加入shape=<数字编号>

示例:

ggplot(data = iris) geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species)) scale_color_manual(values=c("blue","grey","red","#53485f"))

paleteer示例:

palettes_d_names ggplot(data = iris) geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species)) scale_color_paletteer_d("awtools::mpalette")#"配色R包::配色名"

1.4.3 几何对象

一个geom函数所画出来的所有元素被称为几何对象

几何对象可叠加(在同一张图展示多中图像)

多张图存在图层顺序!具体顺序按照书写顺序从下往上安排图层

ggplot(data = iris) geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length)) geom_smooth(mapping = aes(x = Sepal.Length,y = Petal.Length)) -->简化为 ggplot(data = iris,mapping = aes(x = Sepal.Length,y = Petal.Length)) geom_point() geom_smooth() -->单独为点图添加颜色 ggplot(data = iris,mapping = aes(x = Sepal.Length,y = Petal.Length)) geom_point(mapping = aes(color = Species)) geom_smooth() 或 ggplot(data = iris,mapping = aes(x = Sepal.Length,y = Petal.Length)) geom_point(color = red") geom_smooth() aes()代表映射,只有键入该函数才能从数据中读取相应的内容 可以在已有公共设置下进行二次映射

代码不报错不代表没错!!!

重合会导致表现数据减少,图片存在歧义

1.4.4 位置

解决方法:

geom_point(position = "jitter") 或 geom_jitter

1.4.5 坐标系

coord_flip()#翻转坐标系

1.4.6 主题

theme_bw()#改变主题,去掉灰色背景 theme_classic()#去掉背景格纹 theme_dark()#深色主题 theme_minimal()#去背景 theme(legend.position="top")#图例改到上方

1.5 ggpubr

ggpubr画出的图像可以赋值(ggplot2也可赋值),可以进行后续改动/拼图

示例:

p = ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species",shape = "Species",add = "jitter")

组间比较

示例:

my_comparisons <- list(c("setosa","versicolor") c("setosa","verginica") c("versicolor","verginica")) p stat_compare_means(comparisons = my_comparisons, aes(label = after_stat(p.signif))) 要求:

  1. 必须是list
  2. 画几条线就要有几个元素
  3. 必须要有横坐标两两组合组成的向量,即comparisons比较的参数

2 图片保存

2.1 ggplot2系列:

ggsave("iris_box_ggpubr.png") ggsave(p,filename = "iris_box_ggpubr2.png")#已赋值 可使用绝对路径进行保存,但是更换设备无法从该路径进行导入 绝对路径:按照储存路径各级文件夹进行溯源 相对路径:”../../<filename>“ ggsave(p,filename = "fig/iris_box_ggpubr2.png")#保存至工作目录下的fig文件夹,若不存在该fig文件夹可新建文件夹。

2.2 通用:三段论

pdf("test.pdf")#保存的函数及文件名 ...#作图代码 dev.off()#关闭画板

2.3 eoffice系列

topptx(p,"iris_box_ggpubr.pptx")#新建并保存为pptx文件 对点过多的图不适用(e.g.火山图、热图),会导致ppt卡死

3 拼图

R包patchwork

优点:

1.语法简单,完美兼容ggplot2

2.拼图比例设置简单

#(1)支持p1 p2

#(2)布局代码易读性更强

#(3)可给子图添加标记

#(4)可统一修改所有子图

#(5)可将子图图例移到一起,整体性好

##常见问题

代码可运行却不出图

画板被占用——关闭画板

dev.off()#多次运行至null device,再重新运行代码或dev.new()

引用自生信技能树

0 人点赞