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)


R

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!