生信技能树学习之画图
一、ggplot2与ggpubr作图时的代码之间的差异
## ggplot2
library(ggplot2) ###用某一个包之前,最好先library()加载一下
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))
## ggpubr ###去掉了映射、去掉了语法加号+,列名需要带引号
library(ggpubr)
ggscatter(iris,
x="Sepal.Length",
y="Petal.Length",
color="Species")
入门级绘图模版、映射、分面、几何对象、统计变化、位置调整、坐标系
把图形设置为一个或n个颜色或者其他属性,与数据内容无关。
ggplot(data = iris) +
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length),
color = "blue") ##color是 geom_point 的参数,是合法输入,是具体的颜色。
ggplot(data = iris) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length),
size = 5, # 点的大小5mm
alpha = 0.5, # 透明度 50%
shape = 8) # 点的形状
按照数据框的某一列来定义图的某个属性,根据数据的某一列分配颜色等属性
##根据Species定义点的颜色
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species)) ##color 是aes的参数,是不带引号的列名
映射:根据数据的某一列的内容设置颜色。
手动设置:把图形设置为一个或n个颜色,与数据内容无关。
Q1 :能不能自行指定映射的具体颜色? 想要自行指定映射的颜色,就必须要有映射。
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_manual(values = c("blue","grey","red")) ###自行指定映射的3个颜色
###color = Species / c("blue","grey","red") 是要匹配且同时出现的。
color中有几个取值,c()中就要有几个取值,两者必须是匹配且同时出现。
Q2 区分color和fill两个属性
空心形状和实心形状都用color设置颜色; 有填充无轮廓,或者轮廓和填充一样颜色用color;
既有边框又有内心的,才需要color和fill两个参数; 边框(轮廓)和填充颜色不一样时,外边用color,里边用fill。
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),
shape = 17) #17号,实心的例子
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),
shape = 2) #2号,空心的例子
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species),
shape = 24,
fill = "black") #24号,双色的例子
用来分面的函数 facet_wrap()
根据数据的某一列把一张图分成若干张子图;具体分成几张图就看用来分面的那一列有多少个取值。
用来分面的列需要满足以下条件:分类变量;取值数量有限,分面的个数是有限的
ggplot(data = iris) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +
facet_wrap(~ Species) ###单分面,括号内要加~
dat = iris ###不要修改原始数据,重新赋值,在新的文件上进行修改
dat$Group = sample(letters[1:5],150,replace = T) ###在a/b/c/d/e,5个字母中随机重复选取150个值,进行作图
ggplot(data = dat) +
geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +
facet_grid(Group ~ Species) ###双分面 横着按Group的取值分面,竖着按Species的取值分面。
练习题6-1
# 1.加载test.Rdata,分别以test的a和b列作为横纵坐标,change列映射颜色,画点图
load("test.Rdata")
test
ggplot(data = test)+
geom_point(mapping = aes(x = a,
y = b,
color = change ))
###可以简写
load("test.Rdata")
ggplot(test)+
geom_point(aes(x = a,
y = b,
color = change))
# 2.尝试修改点的颜色为暗绿色(darkgreen)、灰色、红色
ggplot(data = test)+
geom_point(mapping = aes(x = a,
y = b,
color = change ))+
scale_color_manual(values = c("darkgreen","grey","red"))
###简写代码
ggplot(test)+
geom_point(aes(x = a,
y = b,
color = change))+
scale_color_manual(values = c("darkgreen","grey","red"))
library(ggplot2)
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_manual(values = c("blue","red","grey"))
#### 也可以写成下面这样,两种情况作出的图一样
a = c("blue","red","grey")
names(a) = unique(iris$Species)
ggplot(data = iris)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_manual(values = a)
几何对象可以叠加
趋势线图+点图
###局部设置
ggplot(data = iris) +
geom_smooth(mapping = aes(x = Sepal.Length,
y = Petal.Length))+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length))
###全局设置
ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))+
geom_smooth()+
geom_point()
###直方图
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut))
ggplot(data = diamonds) +
stat_count(mapping = aes(x = cut))
###geom_bar()可以用函数stat_count()替换,geom_bar()是几何对象的函数,stat_count()是统计变换的函数
###没有纵坐标y ,因为不需要设置y,y是自动计算的结果,表示x的个数。
场景1: 使用表中数据直接做图,而不统计。
fre = as.data.frame(table(diamonds$cut))
fre
ggplot(data = fre) +
geom_bar(mapping = aes(x = Var1, y = Freq), stat = "identity")
geom_bar()函数默认不能设置纵坐标y,如果非要设置纵坐标就加个参数 stat ="identity",不加参数会报错。
场景2:不统计数量,改为统计prop(比例)
ggplot(data = diamonds)+
geom_bar(mapping =aes(x = cut, y =..prop.., group =1))
###用..prop..来与列名进行区分
练习6-2
###1.画箱线图
ggplot(data = iris)+
geom_boxplot(mapping = aes(x = Species,
y = Sepal.Width,
color = Species))
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
color = Species))+
geom_boxplot()
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) + ###外边框是color控制,内部填充是fill
geom_boxplot()
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_point() ###出现的点都集中在中间,需要换函数
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_jitter()
## 6.1抖动的点图
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_point()
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width,
fill = Species)) +
geom_boxplot()+
geom_jitter()
## 6.2堆叠直方图
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut,fill=clarity))
## 6.3 并列直方图
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
#翻转坐标系 coord_flip()
#极坐标系coord_polar()
ggscatter(iris,x="Sepal.Length",y="Petal.Length",color="Species")
ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species", shape = "Species",
add = "jitter")
ggpubr做图,可以赋值。而基础包画图不能赋值。
ggpubr可以给箱线图增加组间比较P值,ggplot2不能。
p <- ggboxplot(iris, x = "Species", y = "Sepal.Length",color = "Species", shape = "Species",
add = "jitter") ###画一张基础的图片
my_comparisons <- list( c("setosa", "versicolor"),
c("setosa", "virginica"),
c("versicolor", "virginica") )
p + stat_compare_means(comparisons = my_comparisons)+ # 增加组间比较P值
stat_compare_means(label.y = 9)
p是做出来的基础的图片,p+stat_compare_means() 在原图的基础上叠加
增加组间比较P值函数:stat_compare_means() ;
比较对象需要提前定义,my_comparisons 就是需要提前设置的比较对象。
练习6-3
ggplot(data = iris,mapping = aes(x = Sepal.Width,
y = Species))+
geom_violin(aes(fill= Species))+ ##需要映射mapping =aes(),不能直接单独写fill= Species
geom_boxplot()+
geom_jitter(aes(shape= Species)) + ###点图是分散抖动的,不能用point,只能用jitter。
scale_shape_manual(values = c()) ###可以更改点的形状和颜色
theme_classic() ### 去除图片的背景和格子
theme_bw() ### 去除图片的背景颜色,不去格子
theme_minimal() ### 去除图片背景颜色和一圈的格子
theme(legend.position = "bottom") ### 可以把图注的位置改到下边,图注想放在哪边就把英文字母改了。
##3个函数,谁在前面,谁先出现,在最底层,就是说,先出现小提琴图,再出现箱线图,最后点图
##这里设置的坐标如果和图片中的横纵坐标一样后边就不用翻转,coord_flip()
ggplot(data = iris,mapping = aes(x = Species,
y = Sepal.Width))+
geom_violin(aes(fill= Species))+
geom_boxplot()+
geom_jitter()+
coord_flip() #前面设置的坐标和图片中的横纵坐标刚好相反,所以需要翻转
小技巧:
这里的横纵坐标不用一个字母一个字母敲上去,两种方法:
1.运行代码colnames(iris),然后在控制台复制;
2.x=iris $ tab键就能自动补齐,iris $ 删除或者不删除都不会报错。
pdf("iris_box_ggpubr.pdf") ##保存的格式及文件名
####中间是画图代码
dev.off() ###只有关闭画板,才能把图片保存成功,提示null device是正确的
###多次运行dev.off(),到null device为止,再重新运行出图代码,或dev.new()
### R语言中唯一一个报错了,可以不管的代码。
ggsave("iris_box_ggpubr.png")
##如下例子:
p <- ggboxplot(iris, x = "Species",
y = "Sepal.Length",
color = "Species",
shape = "Species",
add = "jitter")
ggsave(p,filename = "iris_box_ggpubr.png")
画图的时候没办法设置长宽比例以及像素,但是保存时可以设置长宽比例及像素。
练习题:保存时可以设置长宽比例及像素
library(eoffice)
topptx(p,"iris_box_ggpubr.pptx")
以上所有内容均来自在生信技能树的学习。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。