b站课程视频链接:
https://www.bilibili.com/video/BV19x411X7C6?p=1
腾讯课堂(最新,但是要花钱,我花99😢😢元买了,感觉讲的没问题,就是知识点结构有点乱,有点废话):
https://ke.qq.com/course/3707827#term_id=103855009
本笔记前面的笔记参照b站视频,【后面所有画图笔记】参考了付费视频
笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容,以及补充了个人理解
系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_11393896.html
🔥🔥🔥总结不易,还望各位友友,多多支持&&点赞🙏🙏你的鼓励是我更新的动力!
画出来的pdf图,可以用Adobe Acrobat进行微调,或者用ps
文章目录
- 1. 散点图(两维数据):plot
- 2. 直方图(一维数据):hist
- 3. 条形图:barplot
- 3.1 一维数据条形图
- 3.2 分组条形图 (多维数据)
- 4. 饼图、扇形图(R不推荐,难看)
- 5. 箱线图(一维、二维、三维):boxplot
- 6. 小提琴图:vioplot
- 7. 韦恩图
- 7.1 venn包的venn( )
- 7.2 ggplot2包的ggVennDiagram( )
1. 散点图(两维数据):plot
代码:
m <- read.table("prok_representative.csv",sep = ",",header = T);
x <- m[,2]
y <- m[,4]
# 画黑色的点
plot(x,y,pch=16,xlab="Genome Size",ylab="Genes");
# --------------画蓝色的直线--------------
fit <- lm(y~x);
abline( fit,col="blue",lwd=1.8 );
# 依次计算R^2、截距、斜率 用round保留两位小数
rr <- round( summary(fit)$adj.r.squared,2);
intercept <- round( summary(fit)$coefficients[1],2);
slope <- round( summary(fit)$coefficients[2],2);
# 把结果写到图片附件
eq <- bquote( atop( "y = " * .(slope) * " x + " * .(intercept), R^2 == .(rr) ) );
text(12,6e3,eq);
代码分析:
补充:该图中有两个异常点,怎么找?
2. 直方图(一维数据):hist
hist()可以用来画直方图,hist常用参数:
# ------------ ------------
hist(x)
# breaks表示分成多少个柱子
hist(x,breaks = 80)
# 柱子大小可以不一样
hist(x,breaks = c(0,300,1000,2000,15000))
# freq=F 会使y坐标由频数变成占比
hist(x,breaks = 80,freq = F)
# 设置density后,柱子没有颜色,数值大小表示每英寸线的数量
hist(x,breaks = 80,density = 5)
?hist
最终效果:
数据:
代码:
#基因长度分布图
x <- read.table("H37Rv.gff",sep = "\t",header = F,skip = 7,quote = "")
# 刷选:要求第3列为gene
x <- x[x$V3=="gene",]
# 求出基因长度
x <- abs(x$V5-x$V4)+1
#------------测试数据是否正确----------------------
# 共有多少行
length(x)
# 最小值,最大值
range(x)
# --------------画直方图--------------
h <- hist(x,breaks= 80,col="pink",xlab="Gene Length (bp)",main="Histogram of Gene Length");
#rug是在x坐标轴上标出元素出现的频数。出现一次,就会画一个小竖杠。
#从rug的疏密可以看出变量是什么地方出现的次数多,什么地方出现的次数少。
rug(x);
# --------------蓝色的线---------------------
# 取100个 ——> x点
xfit<-seq(min(x),max(x),length=100);
# 取y点
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x));
yfit <- yfit*diff(h$mids[1:2])*length(x);
# 画线
lines(xfit, yfit, col="blue", lwd=2);
3. 条形图:barplot
barplot()主要参数的含义如下:
height:向量或矩阵,用来构成条形图中各条的数值。
names.arg:位于条低端的文字标签。
beside: 逻辑值,为FALSE时绘制堆叠图,为TRUE时绘制分组图。
horiz: 逻辑值,为FALSE时,绘制垂直条形图,为TRUE时绘制水平条形图。
density:一个向量值。当指定该值时,条将以斜线填充。即每英寸斜线的密度。
angle:以逆时针方向给出的阴影线的角度。默认为45度。
col:条的填充色。
border:条的边框颜色,如设置为TRUE时,边框颜色将于阴影线的颜色相同。
main:用于指定绘图的主标题。
sub:用于指定绘图的次标题。
xlab, ylab :用于指定x轴和y轴的标签。
xlim, ylim:分别用于指定x轴和y轴的取值范围
简单例子:
3.1 一维数据条形图
All <- read.csv(file = "homo_length.csv",header = T)
# 取1~24行,第2列
hg19_24 <- All[1:24,2]
> hg19_24 #一维数据
[1] 249250621 243199373 198022430 191154276 180915260 171115067 159138663 146364022
[9] 141213431 135534747 135006516 133851895 115169878 107349540 102531392 90354753
[17] 81195210 78077248 59128983 63025520 48129895 51304566 155270560 59373566
library(RColorBrewer)
# n=x种颜色,name为面板颜色的名字
cols <- brewer.pal(n = 6,name = "Set1")
barplot(height = hg19_24,names.arg = c(All$chr[1:24]),col = cols)
3.2 分组条形图 (多维数据)
x <- read.csv("sv_distrubution.csv",header = T,row.names = 1)
> x
Contraction Deletion Expansion Insertion
1 97 183 234 265
2 134 193 135 240
3 113 134 122 196
4 116 159 111 144
还有....行
# 要转置才能画出来
barplot(t(as.matrix(x)))
将图片放大,x坐标就会从1增加到最大值
改进:
barplot(t(as.matrix(x)),col = rainbow(4),legend.text = colnames(x),ylim = c(0,800),
main = “SV Distribution”,xlab=“Chromosome Number”,ylab=“SV Numbers”)
4. 饼图、扇形图(R不推荐,难看)
饼图:pie( )
3D饼图:pie3D( )
扇形图:fan.plot( )
R不推荐,难看。如果要画的话,用excel画
5. 箱线图(一维、二维、三维):boxplot
参考别人:箱线图应该怎么看,有什么意义?
该图是由5个特征值绘制而成的图形。
5个特征值是变量的:最小值、下四分位数、中位数、上四分位数、最大值
boxplot( )主要参数的含义:
formula: 公式,形如y~grp,其中y为向量【也就是纵坐标】,grp是数据的分组,通常为因子。
data: 数据框或列表,用于提供公式中的数据。
range: 数值,默认为1.5,表示触须的范围(就是箱子的虚线长度),计算公式:range × (上四分数 - 下四分数)
width: 指定箱体的相对宽度,当有多个箱体时,有效。【如:c(1,0.5,1,3,1,0.5)】
varwidth:逻辑值,控制箱体的宽度, 只有图中有多个箱体时才发挥作用,默认为FALSE, 所有箱体的宽度相同。
当其值为TRUE时,代表【每个箱体的样本量】作为其相对宽度
notch: 逻辑值,如果该参数设置为TRUE,则在箱体两侧会出现凹口。默认为FALSE。
用来看中间50%的数据,是大于中位数多,还是小于中位数多
outline: 逻辑值,如果该参数设置为FALSE,则箱线图中不会绘制离群值。默认为TRUE。
names:绘制在每个箱线图下方的分组标签。
plot : 逻辑值,是否绘制箱线图,如设置为FALSE,则不绘制箱线图,而给出绘制箱线图的相关信息,如5个点的信息等。
border:箱线图的边框颜色。
col:箱线图的填充色。
horizontal:逻辑值,指定箱线图是否水平绘制,默认为FALSE。
数据:【如果数据容量不同,应令varwidth=TRUE】
代码:
boxplot(len ~ dose:supp, data = ToothGrowth,col = c("orange", "red"))
6. 小提琴图:vioplot
就是箱线图+ 密度曲线(表示数据是这个值的个数 / 总体)
例子:
install.packages("vioplot")
library(vioplot)
vioplot(len ~ supp+dose,data = ToothGrowth,col=rep(c("cyan","violet"),3))
7. 韦恩图
用于可视化元素集合
重叠区域的图示。
7.1 venn包的venn( )
数据准备:
install.packages("venn")
library(venn)
listA <- read.csv("genes_list_A.txt",header=FALSE) # list是数据框
A <- listA$V1 # A是向量
listB <- read.csv("genes_list_B.txt",header=FALSE)
B <- listB$V1
listC <- read.csv("genes_list_C.txt",header=FALSE)
C <- listC$V1
listD <- read.csv("genes_list_D.txt",header=FALSE)
D <- listD$V1
listE <- read.csv("genes_list_E.txt",header=FALSE)
E <- listE$V1
# A,B,C,D,E行数不一样,所以不能组成数据框
#组成一个列表(元素是列表)
alist <- list(A,B,C,D,E)
alist
画图:
取前四个列表,col是边界颜色,zcolor是内部区域颜色,ellipse = T图形为椭圆
venn(alist[1:4],col = c("red","blue"),zcolor = c("blue","green"),ellipse = T)
venn(alist[1:4],zcolor = rainbow(5),ellipse = T,ilabels =T )
好看点:
7.2 ggplot2包的ggVennDiagram( )
参考别人的博客:参数介绍
参考别人的博客:【R语言科研绘图】——韦恩图