频率直方图与盒形图
1.频率直方图
hist()
举例
data <-read.table("circ.expression.annot.xls",header=T,row.names=1,sep="\t")
dim(data)
[1] 4999 13
length <- data$spliced_length
hist(length)
数值取值差异太大,存在少量离群的长度,分区间统计的标尺不是我们认为规定的,是默认的。
breaks #参数命令
举例
breaks = 10
# 将数值的从最小到最大分为10份,然后进行统计;
breaks = c(200*0:500)
# 分区间统计, 以 200为基本区间统计500个区间,即从0~100,000;
# breaks 公式的最大、最小值范围应该要包含绘图数据的最大,最小值;
hist(length,breaks = c(200*0:500))
3000以上出现频率太低,可以忽略不计,可以限制坐标轴长度
hist(length,breaks = c(200*0:500), xlim=c(0,3050))
Freq=TRUE #计算频次,绝对数量
Freq=FALSE #计算频率,相对量
默认情况下,统计的是频率(次数的比例)
某个区间样本占总体的比例 = 频率 X 区间宽度
某个区间频次 = (频率 X 区间宽度)X 样本总数
接着美化直方图
hist(length,breaks = c(200*0:500),xlim=c(0,3050),ylim=c(0,2000),ylab="number of circRNA",freq=TRUE,col="blue",main="length of circRNA")
规定x、y轴的范围(xlim、ylim),定义y轴名称(ylab),定义图形的主题(mian)和直方图的颜色(col),计算绝对次数
频率直方图-频率图加拟合线
拟合曲线,density可以计算密度频率曲线,所以要使用频率,将Freq改为FALSE
hist(length,freq=FALSE,breaks = c(200*0:500),xlim=c(0,3050),ylab="number of circRNA",col="blue",main="length of circRNA")
freq 重新调整为FALSE,ylim不定义
拟合线
dens=density(length)
str(dens) # 看看dens里面有哪些东西
lines(dens)
统计结果输出
result=hist(length,freq=FALSE,breaks = c(200*0:15,100000),xlim=c(0,3050),ylab="number of circRNA",col="blue",main="length of circRNA")
str(result) # 显示里面包含的内容
region_start=result$breaks[-length(result$breaks)] #剔除最后一个
region_end=result$breaks[-1] #剔除第一个
middle=result$mids
counts=result$counts
density=result$density
out= cbind(region_start,region_end,middle,counts,density) #合并向量,形成数据框
write.table(out,"out.txt",sep="\t",row.name=F) #输出
频率直方图-加点和线
freq 重新调整为TRUE,将会在直方图的基础上加点图和折线图
result =hist(length,freq=TRUE,breaks = c(200*0:500),xlim=c(0,3050),ylab="number of circRNA",col="blue",main="length of circRNA")
#以下用次级函数描点和描线
points(result$mids,result$counts,col="red",pch=16)
lines(result$mids,result$counts,lty=2)
延展
2.盒形图
几个重要的线
盒形图对分类数据有很好的比较效果呈现,能够清晰地评价比较多组数据的变异大小、总体差异度
mydata <- read.table("circ.expression.annot.xls",header=T,row.names=1,sep="\t") #先导入表格
boxplot(spliced_length ~ annot_type , data = mydata) #画盒形图
或者boxplot(mydata$spliced_length ~ mydata$annot_type) #画盒形图
加点修饰
boxplot(spliced_length ~ annot_type , data = mydata,col="red",ylim=c(0,40000)) #盒形图变红色,y轴限制到40000
mar=c(),对应下、左、上、右的边界宽度,默认是5.1,4.1,4.1,2.1
par(mar=c(5.1,6.1,4.1,2.1),las = 1) # las=1,y坐标轴标签平行,增加左边界的宽度
boxplot(spliced_length ~ annot_type , data = mydata,col="red",ylim=c(0,40000),horizontal = TRUE) #整个图变水平
将两个盒形图放在一个图里,分组的组合
举例:
先画一个盒形图
boxplot(len ~ dose, data = ToothGrowth,
boxwex = 0.25, at = 1:3 - 0.2,
subset = supp == "VC", col = "yellow",
main = "Guinea Pigs' Tooth Growth",
xlab = "Vitamin C dose mg",
ylab = "tooth length",
xlim = c(0.5, 3.5), ylim = c(0, 35), yaxs = "i")
#boxwex缩窄盒形图,at:定义盒子的位置,向左移动0.2,subset定义绘图用子集
使用add 和 'at = ' 来实现亚分组盒形图的共同展示,使用牙齿生长的数据
add=TRUE,将不会绘制新图,而是在旧图上添加内容
boxplot(len ~ dose, data = ToothGrowth, add = TRUE,
boxwex = 0.25, at = 1:3 + 0.2,
subset = supp == "OJ", col = "orange")
加标签
legend(2, 9, c("Ascorbic acid", "Orange juice"),
fill = c("yellow", "orange")