Tips
library(dplyr)以对管道提供支持, 管道符%>%.- 前面指明包名的函数(
包名::函数名())需要先下载安装包(install.package(包名)). 如果用library(包名)加载了包, 引用函数使用不再需要写包名. interaction(向量1,向量2)会将两个向量中的元素组合.
数据交换与数据存储
为了与Excel等众多其他软件进行小批量的数据交换, 我使用csv格式存储数据, 可以用各种软件打开, 也可以使用文本编辑器直接修改.
R中用read.csv()或者readr::read_csv()读取csv文件, 生产数据框(data frame).
data <- read.csv("/csv/file/path", header = TRUE, sep = "\t", stringsAsFactors = TRUE)
header=TRUE会把csv文件的第一行视作数据系列名, 可以用数据框名$数据系列名调用该系列数据.sep参数指明了用来分隔数据的符号.stringsAsFactors=TRUE将csv中的字符串转换为因子, 因子仅是一个标记, 不可以参与计算; 可以用as.character()将因子转换为字符串, 然后赋给自身来使之能够参与计算;stringsAsFactors=FLASE时候可以用factor()完成反向的切换.
如果需要读取xls或者xlsx文件, 可以尝试
readxl::read_excel("/File/Path", sheet="sheet name" or sheetnumber).
绘图(使用R内置函数)
par()函数
par()函数创建并控制绘图区整体的格式. 如果要控制绘图区边框, 只能在par中设置(oma=c(0,0,0,0),mar=c(0,0,0,0)).
plot()函数
plot(x,y,type,xlim,ylim,col,lwd,lty,xlab,ylab,cex.lab,title,axes,frame.plot,asp,ann)
lm()拟合
lm()返回的是拟合曲线的参数, 如果要在绘图区域描出拟合的曲线, 可以用
lines(fitted(lm(y~f(x)))).
lm(因变量\~拟合函数f(x)). 其中拟合函数f(x)是关于x的表达式, 例如多项式写作poly(x,多项式的次数), 会把各项的系数都拟合出来.
image()函数
位图绘图(主要使用EBImage)
- EBImage::readImage(文件路径): 将已有的图片文件转换为matrix或者array.
- EBImage::writeImage(像素matrix/array,文件路径): 将图片写入文件
- EBImage::resize(): 线性差值放缩
- EBImage::gblur(): 高斯模糊
坐标散点图到位图矩阵
- render(散点横坐标,散点纵坐标,位图横向像素数目,位图纵向像素数目)
zeromax=function(im=0){
m=max(im)
if(m==0)
m+1
else
m
}
render=function(x,y,w=1024,h=1024){
if(length(x)==length(y) && w>0 && h>0){
x=x-min(x)+10^(-16)
y=y-min(y)+10^(-16)
x=x*(w/zeromax(x))
y=y*(h/zeromax(y))
im=matrix(0,ceiling(w),ceiling(h))
for(i in 1:length(x)){
im[ceiling(x[i]),ceiling(y[i])]=im[ceiling(x[i]),ceiling(y[i])]+1
}
im=im/zeromax(im)
# EBImage::display(im,method = 'raster')
im
}
else
print("x and y length differs.")
}
放缩与平移
- resize()
- move()
resize=function(image,w=0,h=0){
if(w<=0){
if(h<=0){
stop("either 'w' or 'h' must be specified")
}else{
w=round(nrow(image)*h/ncol(image))
}
}else{
if(h<=0){
h=round(ncol(image)*w/nrow(image))
}
}
wi=nrow(image)/w
hi=ncol(image)/h
image[ceiling((1:w)*wi),ceiling((1:h)*hi)]
# im=matrix(0,w,h)
# for(i in 1:w){
# for(j in 1:h){
#
# }
# }
}
move=function(image,dw=0,dh=0){
dw=round(-dw)
dh=round(-dh)
w=dim(image)[1]
h=dim(image)[2]
if(dh!=0)
for(i in 1:abs(dh))
image=cbind(0,image,0)
if(dw!=0)
for(i in 1:abs(dw))
image=rbind(0,image,0)
if(dw>0)
dw=0
else
dw=2*dw
if(dh>0)
dh=0
else
dh=2*dh
image[(1:w)-dw,(1:h)-dh]
}
绘图(主要使用ggplot2::ggplot())
Error Bar常用数据: 标准差SD, SEM: $SEM=\frac{SD}{\sqrt{n}}$
数据检验常用方法: T test(需要先进行正态性检验), ANOVA test.
library(ggplot2)
- 注意
ggplot()函数只能使用数据框(data.frame)作为绘图数据. - 可以使用变量存储ggplot图片以供后续使用
绘图过程
<!--
## 散点图
ggplot(数据框名, aes(x = 数据系列名, y = 数据系列名)) +
geom_point() +
geom_line()
`ggplot()`生成绘图区并指定绘图数据/坐标轴, `geom_***()`函数指定绘图样式.
- `geom_point()`散点图
- `geom_line()`折线图
- `geom_col()`柱形图, 注意将x轴变为因子.
- `geom_histogram(binwidth=直方粗)`直方图
- `geom_boxplot()`箱线图
- 可以用`ggplot(x=***,aes(x=x))+stat_function(fun='函数名')`绘制函数图形, 相当于`curve(function(x), from=***, to=***)`
参数:
- `fill=`填充颜色
- `colour=`线条颜色
-->
绘图(使用R包ggplot2)
科研绘图实例
刘老师绘图2
xlsx="~/LXCdata/mito-cluster.xlsx" #源数据位置
wsize=2 #字大小
lname=c('control','Opto-STML') #组别名
psize=2 #点大小
meanl=3 #平均值线粗
dlty=4 #标准差线型
dl=2 #标准差线粗
dlen=0.02 #标准差线宽
dhei=0.5 #标准差线高(比例)
a=readxl::read_excel(xlsx,sheet="Sheet1")
t=runif(length(a$T),min=0.85,max=1.15)
tc=runif(length(a$`T+C`),min=1.85,max=2.15)
plot(t,a$T,type='p', xlim=c(0.5,2.5), ylim=c(0,1.22),xaxt='n',xlab='',ylab='',cex.axis=2,
bty='l',yaxs='i',las=2,pch=20,cex=psize,col='grey') #调色
points(tc,a$`T+C`,pch=20,cex=psize, col=rgb(0,0.5,0.4)) #调色
lines(x=c(0.85,1.15),y=c(a$dT[1],a$dT[1]), lwd=meanl)
lines(x=c(1.85,2.15),y=c(a$`dT+C`[1],a$`dT+C`[1]), lwd=meanl)
axis(1,labels = lname, at=1:2,cex.axis=wsize)
lines(x=c(1,1),y=c(a$dT[1]+a$dT[2]*dhei,a$dT[1]-a$dT[2]*dhei),lwd=dl,lty=dlty)
lines(x=c(1-dlen,1+dlen),y=c(a$dT[1]+a$dT[2]*dhei,a$dT[1]+a$dT[2]*dhei),lwd=dl)
lines(x=c(1-dlen,1+dlen),y=c(a$dT[1]-a$dT[2]*dhei,a$dT[1]-a$dT[2]*dhei),lwd=dl)
lines(x=c(2,2),y=c(a$`dT+C`[1]+a$`dT+C`[2]*dhei,a$`dT+C`[1]-a$`dT+C`[2]*dhei),lwd=dl,lty=dlty)
lines(x=c(2-dlen,2+dlen),y=c(a$`dT+C`[1]+a$`dT+C`[2]*dhei,a$`dT+C`[1]+a$`dT+C`[2]*dhei),lwd=dl)
lines(x=c(2-dlen,2+dlen),y=c(a$`dT+C`[1]-a$`dT+C`[2]*dhei,a$`dT+C`[1]-a$`dT+C`[2]*dhei),lwd=dl)
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!