精华内容
下载资源
问答
  • R语言ggplot2基础绘图案例 内含 1.条形图两张(详细代码及png图) 2.散点图三张(详细代码及png图) 3.折线图两张(详细代码及png图)
  • R语言绘图功能及应用案例 一、基础绘图工具 1. 绘图函数 2. 绘图参数介绍 3. 画图面板分割 4. 图形保存 二、图形案例 三、其它图形包
  • R语言绘图

    万次阅读 多人点赞 2013-03-16 15:41:11
    今天突然找到一本专门教授R语言绘图的书,R Graph Cookbook,发现还不错。当初喜欢上R语言就是因为它绘图特别好看。下面把这本书的内容,经过我学习后,翻译并贴上了吧。(我水平还不够,原创还不行呀,不过学习就是...

    画图例子

    R Graph Cookbook例子

     

    今天突然找到一本专门教授R语言绘图的书,R Graph Cookbook,发现还不错。当初喜欢上R语言就是因为它绘图特别好看。下面把这本书的内容,经过我学习后,翻译并贴上了吧。(我水平还不够,原创还不行呀,不过学习就是先模仿再创新的过程)之所以要贴到博客上来,我是怕有一天我也忘记了,好直接到我博客上来搜索一下,同时也方便了别人。

    下面说的是用R语言绘制散点图。其实绘制散点图,用plot(x,y)直接就可以了,不过这样绘制出来的散点图太简单了,不能达到使用的要求,所以要详细得设置一些参数,才能让图形更加的漂亮。

     

    还是直接上代码吧,我已经做好注释的了。

    plot(cars$dist~cars$speed,#y~x,cars是R自带的数据
    main="Relationship between car distance & speed",#标题
    xlab = "Speed(miles per hour)",#x轴标题
    ylab = "Distance travelled (miles)",#Y轴标题
    xlim = c(0,30),#设置x轴的取值区间为0到30
    ylim = c(0,140),#设置y轴的取值区间为0到140
    xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
    yaxs = "i",
    col = "red",#设置颜色
    pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档
    #如果要保存图片怎么办呢?我觉得最简单的方法就是使用RStudio这个IDE,极其得好,可惜很多人都不知道。#如果你不会,可以用如下代码实现:#(图形的参数还有很多个,我这里只使用了其中的几个)
    png(filename="散点图.png",width=480,height=480)
    plot(cars$dist~cars$speed,#y~x
    main="Relationship between car distance & speed",#标题
    xlab = "Speed(miles per hour)",#x轴标题
    ylab = "Distance travelled (miles)",#Y轴标题
    xlim = c(0,30),#设置x轴的取值区间为0到30
    ylim = c(0,140),#设置y轴的取值区间为0到140
    xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
    yaxs = "i",
    col = "red",
    pch = 19)#pch指代点的形状,用数字表示,可查看帮助文档
    dev.off()
    

     

     
    如果你还有另一组数据,需要在上面这幅图里绘制,也就是在同一幅图里面绘制两组数据的散点图,可以像下面这样用point函数:
    png(filename="散点图.png",width=480,height=480)
    plot(cars$dist~cars$speed,#y~x
    main="Relationship between car distance & speed",#标题
    xlab = "Speed(miles per hour)",#x轴标题
    ylab = "Distance travelled (miles)",#Y轴标题
    xlim = c(0,30),#设置x轴的取值区间为0到30
    ylim = c(0,140),#设置y轴的取值区间为0到140
    xaxs = "i",#这里是设置x轴的风格,暂时没看明白有多大区别
    yaxs = "i",
    col = "red",
    pch = 3)#pch指代点的形状,用数字表示,可查看帮助文档
    points(cars$speed~cars$dist,pch=19)#因为比较难弄数据,就把原先的数据因果关系颠倒一下,pch设置与前面不同以区分
    dev.off()

    如果自己没有数据的话,可以用data()查看R语言内置的数据的哦。还是有挺多数据的。

    上面的这些是散点图,但是你只要在参数里面type="l"#是字母l,那么就会将这些点串联起来画成线了。

    下面是条形图的绘制方法(bar plot),数据是该书自带的,代码如下:

    png(filename="散点图.png",width=480,height=480)
    Sales <- read.csv("/home/rickey/文档/电子书/R教程/Learn R statistics/R Graph/Code/Chapter 1/Data Files/citysales.csv",header=TRUE)#header设置为TRUE表示把数据行和列的名称也读取进来
    barplot(Sales$ProductA,
    names.arg=Sales$City,
    col="blue")
    dev.off()

     

    图形输出(pdf\Win\PBG\JPEG\BMP\PostScript)

    用代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。

    #pdf("mygraph.pdf")#pdf文件
    win.metafile("filename.wmf")#windows图形文件
    #png("filename.png")#PBG文件
    #jpeg("filename.jpg")#JPEG文件
    #bmp("filename.bmp")#BMP文件
    #postscript("filename.ps")#PostScript文件
    attach(mtcars)
    plot(wt,mpg)
    abline(lm(mpg~wt))
    title("Regression of MPG on Weight")
    detach(mtcars)
    dev.off()
    


     




     图形初阶

    使用图形

    dose=c(20,30,40,45,60)
    drugA=c(16,20,27,40,60)
    drugB=c(15,18,25,31,40)
    plot(dose,drugA,type="b")
     
     
    type="b" 同时画出点和线
    type=“c" 没有点只有线
     

    5.图形参数

    在上例中,我们想使用实心三角而不是空心圆圈作为点符号的话,病想用虚线代替实现连接这些点:
     
    dose=c(20,30,40,45,60)
    drugA=c(16,20,27,40,60)
    drugB=c(15,18,25,31,40)
    plot(dose,drugA,type="b")
    opar = par(no.readonly=TRUE) #复制一份单签的图形参数
    par(lty=2,pch=17) #将默认的线性类型修改为虚线(lty=2)并且将默认的点符号改为了实心三角(pch=17)
    #也可以使用par(lty=2);par(pch=17)两句
    plot(dose,drugA,type="b")#绘制了图形
    par(opar)#还原了原始设置
    #或者这样写plot(dose,drugA,type="b",lty=2,pch=17)来画图,但只是针对于这张图
    

     

     

     


    pch :指定绘制点时使用的符号

    cex:指定符号的大小。cex是一个数值,表示绘图符号相对于默认值大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍.

    lty:指定线条类型

    lwd:指定线条宽度。(默认值的几倍)

    col:默认的绘图颜色。如这是col=c("red","blue")并需要绘制三条线,第一条为红色,第二条为蓝色,第三条为红色

    col.axis 坐标轴颜色

    col.main 标题颜色

    col.sub 副标题的颜色

    fg 前景色

    bg 背景色

    example: col=1,col="white" col="#FFFFFF" col=rgb(1,1,1) col=hsv(0,1,1) 都可以表示白色

    R中也用多种用于创建连续型颜色向量的函数:

     rainbow()

    heat.colors()

    terrain.colors()

    top.colors()

    cm.colors()

    gray()可以生成多节灰度

    n=10
    mycolors=rainbow(n)
    pie(rep(1,n),labels=mycolors,col=mycolors)
    mygrays=gray(0:n/n)
     pie(rep(1,n),labels=mygrays,col=mygrays)


    6.文本属性

    cex:表示相对默认大小缩放倍数的数值。(倍数)

    cex.axis:坐标轴刻度文字的缩放倍数。

    cex.lab:坐标轴标签(名称)的缩放倍数。

    cex.main:标题的缩放倍数

    cex.sub:副标题的缩放倍数

     

    font: 整数类型。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(adobe编码)

    font.axis font.lab font.main font.sub

    ps 磅值文本最终的大小为ps*cex

    family 绘制文本是使用的字体族。 标准取值为serif(衬线)、sans(无衬线)和mono(等宽)

    Windows中,可以通过函数windowsFont()创造新的映射。(Mac,采用quartzFont())

     

    PDF或者PostScript输出格式图形,修改相对简单。

    PDF使用names(pdfFonts())找出系统有哪些字体可用,然后用pdf(file=”myplot.pdf“,family="fontname")生成图形。

    PostScript输出格式的图形,可以使用names(postscriptFonts())和postscript(file="myplot.ps",family="fontname")

     

    7.图形尺寸和边界尺寸

     pin:以英寸表示的图形尺寸(宽和高)

    mai:以数值向量表示的边界大小,顺序为“下、左、上、右”单位为英寸

    mar:以数值向量表示的边界大小,顺序为“下、左、上、右”单位为英分。默认=c(5,4,4,2)+0.1

    8.添加文本、自定义坐标和图例

    dose=c(20,30,40,45,60)
    drugA=c(16,20,27,40,60)
    drugB=c(15,18,25,31,40)
    plot(dose,drugA,type="b",col="red",lty=2,pch=2,lwd=2,main="Clinical Trails for Drug A",sub="This is hypothetical data",xlab="Dosage",ylab="Drug Respponse",xlim=c(0,60),ylim=c(0,70))


     

     

    某些高级绘图函数已经包含了默认的标题和标签。可以通过plot()语句货单独的par()语句中添加ann=FALSE来移除他们

     

    标题

    可以使用title()函数为图形添加标题和坐标轴标签。

    坐标轴

    side:一个整数,表示图形的那边会画坐标(1,2,3,4对应下、左、上、右)

    at: 一个数值型向量,表示需要绘制刻度线的位置

    labels:一个字符型向量,表示至于刻度线旁边的文字表全(如果是NULL,直接使用at中的值)

    pos:坐标轴线位置的坐标

    lty:线条类型

    col:线条的刻度线颜色

    las:标签是否平行于(=0)或垂直于(=2)坐标轴

    tck:刻度线的长度,以向对于绘图区域大小的分数表示(负数表示在图形外侧,整数表示在图形内侧

    Hmisc包中的minor.tick()函数 用来创建次要刻度线。

    tick.ratio表示次要刻度线相对于主刻度线的大小比例。当前主刻度线长度可以用par("tck")获取。

    参考线

    函数abline()可以用来为图形添加参考线。abline(h=yvalues,v=xvalues)

    example:abline(v=seq(1,10,2),lty=2,col="blue")

    图例

    用legend(location,title,legend,..)添加图例

    location:可以直接给定xy值;location(1)通过鼠标单击给出图例的位置;关键字:bottom、bottomleft、left、topleft、topright、right、bottomright、center,同时使用参数inset=指定图形想图形内侧移动的大小(以绘图大小的分数表示)

    title:图例标题的字符串(选)

    legend:图例标签组成的字符型向量

     

     

    文本标注

    text(location,“”,pos...)

    mtext(“”,side,line=n...)

    location:可以直接给定xy值;location(1)通过鼠标单击给出图例的位置

    pose:整数,文本相对位置的方向参数。如果指定参数offset=,,作为偏移量,以相对于单个字符宽度的比例表示

    side:整数,指定用来放置文本的边。

    par()增大字号

    plotmath()数学标注

     

    attach(mtcars)
    plot(wt,mpg,main="Mileage vs Car Weight",xlab="Weight",ylab="Mileage",pch=18,col="blue")
    text(wt,mpg,row.names(mtcars),cex=0.6,pos=4,col="red")
    detach(mtcars)


     

     

     

    opar=par(no.readonly=TRUE)
    par(cex=1.5)
    plot(1:7,1:7,type="n")
    text(3,3,"Example of default text")
    text(4,4,family="mono","Example of mono-spaced text")
    text(5.5,family="serif","Example of serif text")
    par(opar)


    图形有问题

     

     

     

    图形组合

    在R中使用函数par()或layout()可以容易地组合多幅图形为一幅图形。par()函数中使用图形参数mfrow=c(nrows,ncols)来穿件按行填充的、行数为nrows、列数为ncols的图形矩阵。另外,可以使用nfcols=c(nrows,ncols)按列填充矩阵。

    attach(mtcars)
    opar=par(no.readonly=TRUE)
    par(mfrow=c(3,1))
    hist(wt)
    hist(mpg)
    hist(disp)
    par(opar)
    detach(mtcars)


     

    attach(mtcars)
    opar= par(no.readonly=TRUE)
    par(mfrow=c(2,2))
    plot(wt,mpg,main="Scatterplot of wt vs. mpg")
    plot(wt,disp,main="Scatterplot of wt vs. disp")
    hist(wt,main="Boxplot of wt")
    boxplot(wt,main="Boxplot of wt")
    par(opar)
    detach(mtcars)


     

     

    函数layout()的调用形势为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形所在位置。

    attach(mtcars)
    layout(matrix(c(1,1,2,3),2,2,byrow=TRUE))
    hist(wt)
    hist(mpg)
    hist(disp)
    detach(mtcar)


     

     下面代码,将一幅图形放在第一行,两幅图放在第二行,但第一行高度是第二行中图形高度的三分之一,并且,右下角图形宽度是左下角图形宽度的四分之一。

    attach(mtcars)
    layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths=c(3,1),heights=c(1,2))
    hist(wt)
    hist(mpg)
    hist(disp)
    detach(mtcars)


     

     图形布局的精细控制

    fig=完成这个任务

     

    基本图形

    条形图

    简单的条形图

    vcd包

    如果要绘制的类别类型是一个Factor或者是有序性Factor,就可以使用plot()函数快速创建一幅垂直条形图。这时候不用table()函数

    (这是关节炎研究,变量Improved记录了对每位接受了安慰剂或药物治疗的病人的治疗效果)

    library(vcd)
    counts=table(Arthritis$Improved)
    counts
     barplot(counts,main="Simple Bar Plot",xlab="Improvement",ylab="Frequency")
    barplot(counts,main="Horizontal Bar Plot",xlab="Frequency",ylab="Improvement",horiz=TRUE)

    堆砌条形图和分组条形图

    如果height是一个矩阵而不是一个向量,则绘制结果将是一副堆砌条形图或分组挑衅图。besides=false(默认)->堆砌图 or not 分组条形图

    counts=table(Arthritis$Improved,Arthritis$Treatment)
    counts
            
     #        Placebo Treated
     # None        29      13
     # Some         7       7
     # Marked       7      21
    barplot(counts,main="Grouped Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts))


     barplot(counts,main="Grouped Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts),beside=TRUE)


     

    均值条形图

    条形图并不一定要基于计数数据或者频率数据。(均值,中位数,标准差)

    states=data.frame(state.region,state.x77)
    means=aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
    means
    #        Group.1        x
    #1     Northeast 1.000000
    #2         South 1.737500
    #3 North Central 0.700000
    #4          West 1.023077
    means=means[order(means$x),]
    means
    #       Group.1        x
    #3 North Central 0.700000
    #1     Northeast 1.000000
    #4          West 1.023077
    #2         South 1.737500
    barplot(means$x,names.arg=means$Group.1)
    title("Mean Illiteracy Rate")

     



    中级绘图

    主要关注用于展示双变量间关系(二元关系)和多变量间关系(多远关系)的绘图方法。

    散点图

    散点图可以用来描述两个连续变量间的关系。
    首先,描述一个二元变量关系,然后探究各种通过添加而外信息来增强图形表达功能的方法。
    最后,通过添加第三个连续型变量,我们将把二维图形扩展到三位,包括三维散点图和气泡图。
    attach(mtcars)
    plot(wt,mpg,main="Basic Scatter plot of MPG vs Weight",xlab="Car Weight(1bs/1000)",ylab="Miles Per Gallon ",pch=19)
    abline(lm(mpg~wt),col="red",lwd=2,lty=1)
     lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)



    abline()函数用来添加最佳拟合的线性直线。lowess()函数用来添加一条平滑曲线。该平滑曲线拟合是一种基于局部加权多项式回归的非参数方法。算法来源于Cleveland(1981)

    car包中的scatterplot()函数增强了散点图的需对功能,主要作用在添加拟合曲线,边界箱线图和之心椭圆,还可以按子集绘图和交互式地识别点。
    > library(car)
    > scatterplot(mpg~wt|cyl,data=mtcars,lwd=2,main="Scatter Plot of MPG vs. Weight by # Cylinders",xlab="Weight of Car(lbs/1000)",ylab="Miles Per Gallon",legend.plot=TRUE,id.method="identify",labels=row.names(mtcars),boxplots="xy")




    1.scatterplot()函数用来描绘有4个6个8个气缸的汽车每加仑英里数对车重的图形。
    2.表达式mpg~wt|cyl表示按条件绘图,按照cyl的水平分别绘制mpg和wt关系图。
    3.默认条件下,各个子集通过颜色和图形符号加以区分,并同时绘制线性拟合和平滑拟合曲线。平滑拟合默认需要5个单独的数据点。
    4.idmethod选项的设点表明可以通过鼠标单击方式来交互式地识别数据点。知道Stop。(在studio里面是ESC)
    5.legend.plot 表明在左上边界添加土里。

    散点图矩阵

    R中至少有四种创建散点图矩阵的实用函数。
    pairs()函数可以创建基础的散点图矩阵。 
    pairs(~mpg+disp+drat+wt,data=mtcars,main="Basic Scatter Plot Matrix")


    通过调整参数,可以只显示下三角或上三角的图形。
    upper.panel=NULL 将众生城下三角图形。

    scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,spread=FALSE,lty.smooth=2,main="Scatter Plot Matrix via car Pachage")
    这里ity.smooth=2 本想设定平滑拟合曲线为虚线,但是报错lty.smooth 不是图形参数,还没有解决。但是如果lty=2,就把拟合的直线设置为虚线。


    library(car)
    scatterplotMatrix(~mpg+disp+drat+wt|cyl,data=mtcars,spread=FALSE,diagonal="histogram",main="Scatter Plot Matrix via car Package")

    这里,我们想主对角线的和密度曲线改成了直方图(各车汽缸数为条件)
    默认地,回归直线拟合整个样本,包好by.groups=TRUE。




    gclus包中的cpairs()函数提供了其变种。它可以重排矩阵中变量位置的选项,可以让相关性更好的变量更靠近对角线。该函数还能对各个单元格进行颜色编码来展示变量间的相关性大小。
    cor(mtcars[c("mpg","wt","disp","drat")])
                mpg               wt                      disp               drat
    mpg   1.0000000    -0.8676594    -0.8475514     0.6811719
    wt   -0.8676594     1.0000000      0.8879799     -0.7124406
    disp -0.8475514     0.8879799     1.0000000     -0.7102139
    drat  0.6811719    -0.7124406     -0.7102139     1.0000000
    dmat.color() order.single() cpairs()函数都来自于gclus包。

    第一步,选出需要的变量,并计算他们的相关系数的绝对值。
    第二步,使用dmat.color()获取绘图颜色。给定一个对称矩阵,dmat.color()将返回一个颜色矩阵。
    第三步,排序。通过order.single()散点图矩阵将根据新的变量顺序(myorder)和颜色列表(mycolor)绘图上色,gap使得矩阵各单元格间的间距稍微增大一些。

     library(gclus)
    mydata=mtcars[c(1,3,5,6)]
    mydata.corr=abs(cor(mydata))
    mycolors=dmat.color(mydata.corr)
    myorder=order.single(mydata.corr)
    cpairs(mydata,myorder,panel.colors=mycolors,gap=.5,main="Variables Ordered and Colored by Correlation")


    set.seed(1234)
    n=10000
    c1=matrix(rnorm(n,mean=0,sd=.5),ncol=2)
     c2=matrix(rnorm(n,mean=3,sd=2),ncol=2)
    mydata=rbind(c1,c2)
    mydata=as.data.frame(mydata)
    names(mydata)=c("x","y")
    with(mydata,plot(x,y,pch=19,main="Scatter Plot with 10000 Observations"))


    针对上述数据点的重叠导致识别xy间关系变得异常困难。可以使用封箱、颜色和透明度来知名途中人一点上重叠点的数目。
    smoothScatter()函数可利用核密度估计声称用颜色密度来表示店分布的散点图。
    with(mydata,smoothScatter(x,y,main="Scatterplot Colored by Smoothed Densities"))
    KernSmooth 2.23 loaded
    Copyright M. P. Wand 1997-2009

    hexbin包中的hexbin() 函数将二元变量的封箱放到六边形单元格中(图形比名称更直观)

    library(hexbin)
    with(mydata,{
    bin=hexbin(x,y,xbins=50)
    plot(bin,main="Hexagonal Binning with 10000 Observations")
    })



    IDPmisc包中的iplot()函数也可以通过颜色来展示店的密度(特定点上的数据数目)。


    with(mydata,iplot(x,y,main="Image Scatter Plot with Color Indicating Density"))



    三维散点图

    可以用scatterplot3d中的scatterplot3d()函数来绘制他们的关系。
    library(scatterplot3d)
    attach(mtcars)
    scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=TRUE,type="h",main="Basic 3D Scatter Plot")


    fit=lm(mpg~wt+disp)
    s3d$plane3d(fit)



    气泡图

    先创建一个二维散点图,然后点的大小代表第三个变量的值。
    sysbols(x,y,circle=radius)
    inches是比例因子,控制着圆圈大小(就默认最大圆圈为1inch)text()函数是可选函数,添加各个汽车名称。
    一般来说,统计热源倾向于避免使用气泡图,相对于长度来说,人们对于体积或面积判断更吃力。但是在商业应用中非常受欢迎。
    attach(mtcars)
    r=sqrt(disp/pi)
    symbols(wt,mpg,circle=r,inches=0.30,fg="white",bg="lightblue",main="Bubble Plot with point size proportional to displacement",ylab="Miles Per Gallon",xlab="Weight of Car(lbs/1000)")
    text(wt,mpg,rownames(mtcars),cex=0.6)
    detach(mtcars)




    折线图

    相关图

    相关系数矩阵是多元统计分析的一个基本方法。
    哪些被考察的变量与其他变量相关性很强,哪些不强?
    相关变量是否以某种特定的方式聚集在一起?
    随着变量数的增加,这类问题将变得更难回答。

    > options(digits=2)
    > cor(mtcars)
           mpg   cyl  disp    hp   drat    wt   qsec    vs     am
    mpg   1.00 -0.85 -0.85 -0.78  0.681 -0.87  0.419  0.66  0.600
    cyl  -0.85  1.00  0.90  0.83 -0.700  0.78 -0.591 -0.81 -0.523
    disp -0.85  0.90  1.00  0.79 -0.710  0.89 -0.434 -0.71 -0.591
    hp   -0.78  0.83  0.79  1.00 -0.449  0.66 -0.708 -0.72 -0.243
    drat  0.68 -0.70 -0.71 -0.45  1.000 -0.71  0.091  0.44  0.713
    wt   -0.87  0.78  0.89  0.66 -0.712  1.00 -0.175 -0.55 -0.692
    qsec  0.42 -0.59 -0.43 -0.71  0.091 -0.17  1.000  0.74 -0.230
    vs    0.66 -0.81 -0.71 -0.72  0.440 -0.55  0.745  1.00  0.168
    am    0.60 -0.52 -0.59 -0.24  0.713 -0.69 -0.230  0.17  1.000
    gear  0.48 -0.49 -0.56 -0.13  0.700 -0.58 -0.213  0.21  0.794
    carb -0.55  0.53  0.39  0.75 -0.091  0.43 -0.656 -0.57  0.058
          gear   carb
    mpg   0.48 -0.551
    cyl  -0.49  0.527
    disp -0.56  0.395
    hp   -0.13  0.750
    drat  0.70 -0.091
    wt   -0.58  0.428
    qsec -0.21 -0.656
    vs    0.21 -0.570
    am    0.79  0.058
    gear  1.00  0.274
    carb  0.27  1.000

    这里使用的是corrgram包中的corrgram()函数。
    下三角单元格中:
    默认蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关。反过来,红色且从左上指向右下的斜杠表示负相关。
    色彩越深,饱和度越高,说明变化相关性越大。
    相关性接近于0的单元格基本物色。
    上三角单元格中:
    颜色功能同上,但相关性大小由被填充的饼图块大小展示出来。争先惯性将从12点钟处开始顺时针填充饼图,而负相关将逆时针填充饼图。
    order=TRUE时候,相关矩阵将使用PCA分析对变量重新排序。
    panel设定非对角线使用的元素的类型。lower.panel upper.panel ; panel.pie(饼图)/panel.shade(阴影深度)/panel.ellipse(置信椭圆)/panel.pts(平滑拟合曲线
    text.panel and diag.panel 控制着主对角线元素类型。panel.minmax(输出最大最小值)/panel.txt

    library(corrgram)
    corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,text.panel=panel.txt,main="Correlogram of mtcars intercorrelations")



    corrgram(mtcars,order=TRUE,lower.panel=panel.ellipse,upper.panel=panel.pts,text.panel=panel.txt,diag.panel=panel.minmax,main="Correlogram of mtcars data using scatter plots and ellipses")
    corrgram(mtcars,lower.panel=panel.shade,upper.panel=NULL,text.panel=panel.txt,main="Car Mileage Data(unsorted)")



    马赛克图


    转贴请注明:http://blog.csdn.net/disappearedgod/article/details/8681312

    展开全文
  • R语言绘图详解

    万次阅读 2014-09-09 15:25:33
    除了低级作图命令之外,图形的显示也可以用绘图参数来改良。绘图参 数可以作为图形函数的选项(但不是所有参数都可以这样用),也可以用函 数par来永久地改变绘图参数,也就是说后来的图形都将按照par指定的参数 ...
    除了低级作图命令之外,图形的显示也可以用绘图参数来改良。绘图参数可以作为图形函数的选项(但不是所有参数都可以这样用),也可以用函数par来永久地改变绘图参数,也就是说后来的图形都将按照par指定的参数来绘制。例如,下面的命令:
    > par(bg="yellow")
    将导致后来的图形都以黄色的背景来绘制。有73个绘图参数,其中一些有非常相似的功能。这些参数详细的列表可以参阅?par;下面的表格只列举了最常用的参数。
    adj 控制关于文字的对齐方式,0是左对齐,0.5是居中对齐,1是右对齐,值> 1时对齐位置在文本右边的地方,取负值时对齐位置在文本左边的地方;如果给出两个值(例如c(0, 0)),第二个只控制关于文字基线的垂直调整。
    bg 指定背景色(例如bg="red", bg="blue"; 用colors()可以显示657种可用的颜色名)
    bty 控制图形边框形状,可用的值为: "o", "l", "7", "c", "u" 和"]" (边框和字符的外表相像);如果bty="n"则不绘制边框
    cex 控制缺省状态下符号和文字大小的值; 另外,cex.axis控制坐标轴刻度数字大小,cex.lab控制坐标轴标签文字大小,cex.main控制标题文字大小,cex.sub控制副标题文字大小
    col 控制符号的颜色; 和cex类似, 还可用:col.axis, col.lab, col.main,col.sub
    font 控制文字字体的整数(1: 正常,2: 斜体,3: 粗体,4: 粗斜体);和cex类似,还可用: font.axis, font.lab, font.main, font.sub
    las 控制坐标轴刻度数字标记方向的整数(0: 平行于轴,1: 横排,2: 垂直于轴,3:竖排)
    lty 控制连线的线型, 可以是整数(1: 实线,2: 虚线,3: 点线,4: 点虚线,5: 长虚线,6: 双虚线),或者是不超过8个字符的字符串(字符为从"0"到"9"之间的数字)交替地指定线和空白的长度,单位为磅(points)或象素,例如lty="44"和lty=2效果相同
    lwd 控制连线宽度的数字
    mar 控制图形边空的有4个值的向量c(bottom, left, top, right), 缺省值为c(5.1, 4.1, 4.1, 2.1)
    mfcol c(nr,nc)的向量,分割绘图窗口为nr行nc列的矩阵布局,按列次序使用各子窗口
    mfrow 同上,但是按行次序使用各子窗口
    pch 控制符号的类型,可以是1到25的整数,也可以是""里的单个字符
    ps 控制文字大小的整数,单位为磅(points)
    pty 指定绘图区域类型的字符,"s": 正方形,"m":最大利用
    tck 指定轴上刻度长度的值,单位是百分比,以图形宽、高中最小一个作为基数;如果tck=1则绘制grid
    tcl 同上,但以文本行高度为基数(缺省下tcl=-0.5)
    xaxt 如果xaxt="n"则设置x-轴但不显示(有助于和axis(side=1, ...)联合使用)
    yaxt 如果yaxt="n"则设置y-轴但不显示(有助于和axis(side=2, ...)联合使用)
     
    2. R1.8 画图参数-pch
     
    已有 1783 次阅读 2010-1-28 14:48 |个人分类:统计学习笔记|系统分类:科研笔记|关键词:R 画图 pch
    查看pch各参数形状:
    plot(rep(1,10),ylim=c(-2,1.2),pch=1:10,cex=3,axes=F,xlab="",ylab="")
    text(rep(0.6,10),as.character(1:10))
    points(rep(0,10),pch=11:20,cex=3)
    text(rep(-0.4,10),as.character(11:20))
    points(rep(-0.8,5),pch=21:25,cex=3)
    text(rep(-1.2,5),as.character(21:25))
    points(6:10, rep(-0.8,5),pch=c("*","?","X","x","&"),cex=3)
    text(6:10,rep(-1.2,5),c("*","?","X","x","&"))



    R画图常用图形  
    S-PLUS有很强的图形功能,它可以用简单的函数调用迅速作出数据的各种图形,当你熟悉了S图形的技术之后也可以指定许多图形选项按自己的要求定制图形。它的另一个特色是同一个绘图函数对不同的数据对象可以作出不同的图形。例如,用7.1.2读入的cl数据框:
    > plot(cl) > plot(cl[,1])
    第一个plot()调用绘制cl中三个列的散点图矩阵,第二个plot()调用绘制身高的散点图(纵轴为身高值,横轴为下标)。
    最常用的绘图函数为plot(),用plot()作两个变量x与y的散点图,使用如下例的方法:
    > attach(cl) > plot(Height, Weight, main="体重对身高的回归", + xlab="身高", ylab="体重")
    R画图常用图形 - zhangwei2039 - 闲云的博客
    上例在R中运行成功(见图2),在S-PLUS中请将汉字字符串改为英文。上例也演示了S中如何输入较长的语句:只要语句明显地未完成(比如,缺右括号),系统将给出一个加号作为续行提示。如果输入“x <- 1+2”时要拆行,可以在赋值号后拆,可以在加号与2之间拆,但是如果在x后拆则只能显示x的当前值,如果在1与加号之间拆只能把1赋给x。
    为了绘制连线图,只要在plot()函数中加type="l"选项,如:
    > plot((1:50)/50, log((1:50)/50), type="l")
    可以绘制变量的茎叶图,如:
    > stem(Weight)   The decimal point is 1 digit(s) to the right of the |   4 | 1 6 | 7 8 | 3445508 10 | 0332233 12 | 83 14 | 0
    绘制一个变量的盒形图,如:
    > boxplot(Weight)
    R画图常用图形 - zhangwei2039 - 闲云的博客
    结果见图3。可以绘制几个变量并排的盒形图,比如先计算用上面的回归拟合结果存入p1 ,然后绘制并排盒形图:
    > p1 <- predict(fit1, cl)[,"predictor"] > boxplot(Weight, p1)
    用hist()函数可以绘制直方图。例如:
    > hist(Weight)
    得图4。 R画图常用图形 - zhangwei2039 - 闲云的博客
    用qqnorm()函数绘制正态概率图,如:
    > qqnorm(Weight)
    得图5。 R画图常用图形 - zhangwei2039 - 闲云的博客 
    高级图形函数
    S的图形函数分为两类:高级图形函数――直接绘制图形并可自动生成坐标轴等附属图形元素;低级图形函数――可以修改已有的图形或者为绘图规定一些选择项。高级图形函数总是开始一个新图。下面我们介绍常用的高级图形函数,以及用来修饰这些高级图形函数的常用可选参数。
    最常用的是plot()函数。比如,plot(x,y)(其中x,y是向量)对两个变量画散点图。用plot(z) (其中z是一个定义了x变量和y变量的列表,或者一个两列的矩阵)也可以达到同样目的。如果x是一个时间序列对象(时间序列对象用ts()函数生成),plot(x)绘制时间序列曲线图。如果x是一个普通向量,则绘制x的值对其下标的散点图。如果x是复数向量则绘制虚部对实部的散点图。如果f是一个因子,则plot(f)绘制f的条形图(每个因子水平的个数)。如果f是因子,y是同长度的数值向量,则plot(f,y)对f的每一因子水平绘制y中相应数值的盒形图。如果d是一个数据框,则plot(d)对d的每两个变量之间作图(散点图等)。
    如果X是一个数值型矩阵或数据框,用pairs(X)可以绘制每两列之间的散点图矩阵。这在变量个数不太多时可以同时看到多个变量的两两关系,变量太多时则难以绘制。
    协同图(coplot)是一种多变量的探索性分析图形。其形式为coplot(y ~ x | z),其中x 和y是数值型向量,z是同长度的因子。对z的每一水平,绘制相应组的x和y的散点图。如:
    > attach(cl) > coplot(Weight ~ Height | Sex)
    R画图常用图形 - zhangwei2039 - 闲云的博客
    产生图6。对不同性别分别绘制了体重对身高的散点图。如果z是一个数值型变量,则coplot() 先对z的取值分组,然后对z的每一组取值分别绘图。甚至可以用如coplot(y~x | x1+x2)表示对x1和x2的每一水平组合绘图。coplot()和pairs()函数缺省绘制散点图,但可以用一个panel= 参数指定其它的低级绘图函数,如lines,panel.smooth等。
    tsplot(x)绘制时间序列曲线图。多个参数时tsplot(x1, x2, ...)表示绘制多条曲线,自动统一曲线取值范围。如果参数非时间序列对象则以下标1,2,3等为横坐标绘图。
    qqnorm(x), qqline(x), qqplot(x,y)作分位数-分位数图。qqnorm(x)对向量x作正态概率(纵轴为次序统计量值,横轴为对应该次序统计量的标准正态分布分位数值)。qqline(x) 除作qqnorm(x)图之外还画一条拟合曲线。qqplot(x,y)把x和y的次序统计量分别画在x轴和y 轴以比较两个变量的分布。
    hist(x)作向量x的直方图。缺省时自动确定分组,也可以用nclass=参数指定分组个数,或者用breaks=参数指定一个分组点向量。如果指定了prob=T则纵轴显示密度估计。
    S也可以作三维图或等值线图,函数为persp()和contour(),见图7和图8。
    R画图常用图形 - zhangwei2039 - 闲云的博客
    R画图常用图形 - zhangwei2039 - 闲云的博客
    高级图形函数的常用选项
    高级图形函数有一些共同的选项,作为函数的可选参数(自变量)。例如:
    > plot(x)
    > plot(x, main="Graph of x")
    其中的main就是一个可选参数,用来指定图形的标题。没有此选项时图形就没有标题。这样的选项还有:
    add=T
    使函数向低级图形函数那样不是开始一个新图形而是在原图基础上添加。
    axes=F
    暂不画坐标轴,随后可以用axis()函数更精确地规定坐标轴的画法。缺省值是axes=T,即有坐标轴。
    log="x" log="y"
    log="xy"
    把x轴,y轴或两个坐标轴用对数刻度绘制。
    type=




    type="p"
     




    type="l"
     


    type="b"
     


    type="o"
     


    type="h"
     


    type="s"
     


    type="S"
     


    type="n"
    规定绘图方式:




    绘点
     


    画线
     


    绘点并在中间用线连接
     


    绘点并画线穿过各点
     


    从点到横轴画垂线
     


    阶梯函数;左连续
     


    阶梯函数;右连续
     


    不画任何点、线,但仍画坐标轴并建立坐标系,适用于后面用低级图形函数作图。
    xlab="字符串" ylab="字符串" main="字符串"
    sub="字符串"
    定义x轴和y轴的标签。缺省时使用对象名。   图形的标题。
    图形的小标题,用较小字体画在x轴下方。


    低级图形函数
    高级图形函数可以迅速简便地绘制常见类型的图形,但是,某些情况下你可能希望绘制一些有特殊要求的图形。比如,你希望坐标轴按照自己的设计绘制,在已有的图上增加另一组数据,在图中加入一行文本注释,绘出多个曲线代表的数据的标签,等等。低级图形函数让你在已有的图的基础上进行添加。
    常用的低级图形函数罗列如下:
    points(x,y)
    lines(x,y)
    在当前图形上叠加一组点或线。可以使用plot()的type=参数来指定绘制方法,缺省时points() 画点,lines()画线。
    text(x,y, labels, ...)
    在由坐标x和y给出的位置标出由labels指定的字符串。labels可以是数值型或字符型的向量,labels[i]在x[i],y[i]处标出。
    abline(a, b) abline(h=y) abline(v=x)
    abline( lm.obj)
    在当前图形上画一条直线。两个参数a, b分布给出截距和斜率。指定h=参数时绘制水平线,指定v=参数时绘制垂直线。以一个最小二乘拟合结果lm.obj作为参数时由lm.obj的$coefficients 成员给出直线的截距和斜率。
    polygon(x, y, ...)
    以由向量x给出的横坐标和向量y给出的纵坐标为顶点绘制多边形。可以用col=参数指定一个颜色填充多边形内部。
    legend(x, y, legend, ...)   legend(, angle=v) legend(, density=v) legend( , fill=v) legend(, col=v) legend(, lty=v) legend(, pch=v) legend(, marks=v)
    legend函数用来在当前图形的指定坐标位置绘制图例。图例的说明文字由向量legend提供。至少下面的v值要给出以确定要对什么图例进行说明,v是长度与legend相同的向量。
    angle参数指定几种阴影斜角。   density参数指定几种阴影密度。   fill参数指定几种填充颜色。 col参数指定几种颜色。 lty参数指定几种线型。 pch参数指定几种散点符号。为字符型向量。  
    marks参数也指定几种散点符号,但使用散点符号数值代号,为数值型向量。
    title(main, sub)
    绘制由main指定的标题和由sub指定的小标题。
    axis(side, ...)
    绘制一条坐标轴。这之前的绘图函数必须已经用axes=F选项抑制了自动的坐标轴。参数side 指定在哪一边绘制坐标轴,取值为1到4,1为下边,然后逆时针数。可以用at=参数指定刻度位置,用labels参数指定刻度处的标签。
    低级图形函数一般需要指定位置信息,其中的坐标指的是所谓用户坐标,即前面的高级图形函数所建立的坐标系中的坐标。坐标可以用两个向量x和y给出,也可以由一个两列的矩阵给出。如果交互作图可以用下面介绍的locator()函数来交互地从图形中直接输入坐标位置。


    交互图形函数
    S的低级图形函数可以在已有图形的基础上添加新内容,另外,S还提供了两个函数locator 和identify可以让用户通过在图中用鼠标点击来确定位置。
    函数locator(n, type)运行时会停下来等待用户在图中点击,然后返回图形中鼠标点击的位置的坐标。等待点击时用鼠标中键点击可以选择停止等待,立即返回。参数n指定点击多少次后自动停止,缺省为500次;参数type如果使用则可指定绘点类型,与plot()函数中的type 参数用法相同,在鼠标点击处绘点(线、垂线,等等)。locator()的返回值是一个列表,有两个变量(元素)x和y,分别保存点击位置的横坐标和纵坐标。
    例如,为了在已经绘制的曲线图中找一个空地方标上一行文本,只要使用如下程序:
    > text(locator(1), "Normal density", adj=0)
    text()函数的adj参数用一个数字表示文本串相对于给定的坐标的画法,adj=0表示给定坐标为文本串左侧的坐标,adj=1表示给定坐标为文本串右侧的坐标,adj=0.5表示给定坐标为文本串中间的坐标。
    函数identify(x, y, labels)在运行时也会停下来等待用户点击,直到按了鼠标中键,任何返回用户在图形中用鼠标点击的点的序号,点击时对点击的点加标签。参数x和y给出要识别的各个点的坐标。labels参数指定点击某个点时要在旁边绘制的文本标签,缺省时标出此点的序号,如果只需要返回值而不想画任何标记则可以在调用此函数时加一个plot=F参数。注意identify()与locator()不同,locator()返回图中任意点击位置的坐标,而identify() 只返回离点击位置最近的点的序号。
    例如,我们在向量x和y中有若干个点的坐标,运行如下程序:
    > plot(x, y) > identify(x, y)
    这时显示转移到图形窗口,进入等待状态,用户可以点击图中特别的点,该点的序号就会在旁边标出。为了结束,只要单击鼠标中键或单击右键并选择停止。返回结果为你点击的各个点的序号:
    [1] 4 6 7 8


    图形参数的使用
    前面我们已经看到了如何用main=,xlab=等参数来规定高级图形函数的一些设置。在实际绘图,特别是绘制用于演示或出版的图形时,S用缺省设置绘制的图形往往不能满足我们的要求。但是,S提供了一系列所谓图形参数,通过使用图形参数可以修改图形显示的所有各方面的设置。图形参数包括关于线型、颜色、图形排列、文本对齐方式等各种设置。每个图形参数有一个名字,比如col代表颜色,取一个值,比如col="red"是红色。每个图形设备有一套单独的图形参数。
    设置图形参数分为两种:永久设置与临时设置。永久设置使用par()函数进行设置,设置后在退出前一直保持有效;临时设置则是在图形函数中加入图形参数,如上面的例子:
    > text(locator(1), "Normal density", adj=0)
    中的adj参数。
    par()函数用来访问或修改当前图形设备的图形参数。如果不带参数调用,如:
    > par() $adj [1] 0.5   $ann [1] 1   ………………   $tcl [1] -0.5
    结果为一个列表,列表的各元素名为图形参数的名字,元素值为相应图形参数的取值。
    如果调用时指定一个图形参数名的向量作为参数,则只返回被指定的图形参数的列表:
    > par(c("col", "lty")) $col [1] "black"   $lty [1] "solid"
    调用时指定名字为图形参数名的有名参数,则修改指定的图形参数,并返回原值的列表:
    > oldpar <- par(col=4, lty=2) > oldpar $col [1] "black"   $lty [1] "solid"
    因为用par()修改图形参数是保持到退出以前都有效的,而且即使是在函数内此修改仍是全局的,所以我们可以利用如下的惯用法,在完成任务后恢复原来的图形参数:
    > oldpar <- par(col=4, lty=2) ………………(需要修改图形参数的绘图任务) > par(oldpar) # 恢复原始的图形参数
    除了象上面那样用par()函数永久修改图形参数,我们还可以在几乎任何图形函数中指定图形参数作为有名参数,这样的修改是临时的,只对此函数起作用。例如:
    > plot(x, y, pch="+")
    就用图形参数pch指定了绘散点的符号为加号。这个设定只对这一张图有效,对以后的图形没有影响。


    图形参数详解
    鉴于绘制有特殊需要的图形是S的一个强项,而使用图形参数是完成此类任务的重要手段,我们在这里较详细地介绍S的各种图形参数。这些图形参数可以大体上分为以下的几个大类,我们将分别介绍:




    图形元素控制
     


    坐标轴与坐标刻度
     


    图形边空
     


    一页多图
     


     


    一、图形元素
    图形由点、线、文本、多边形等元素构成。下列的图形参数用来控制图形元素的绘制细节:
    pch="+"    
    pch=4
    指定用于绘制散点的符号。绘制的点往往略高于或低于指定的坐标位置,只有pch="."没有这个问题。
     
    如果pch的值为从0到18之间的一个数字,将使用特殊的绘点符号。下例可以显示所有特殊绘点符号:
    > plot(c(0, 100), c(0, 100), type="n", axes=F, xlab='', ylab='') > legend(10,90, as.character(0:9), pch=0:9) > legend(50,90, as.character(10:18), pch=10:18)
    lty=2
    指定画线用的线型。缺省值lty=1是实线。从2开始是各种虚线。
    lwd=2
    指定线粗细,以标准线粗细为单位。这个参数影响数据曲线的线宽以及坐标轴的线宽。下例绘制正弦曲线图:
    > oldpar <- par(lwd=2) > x <- (0:100)/100*2*pi > plot(x, sin(x), type="l", axes=F) > abline(h=0) > abline(v=0) > par(oldpar)
    col=2
    指定颜色,可应用于绘点、线、文本、填充区域、图象。颜色值也可以用象"red","blue" 这样的颜色名指定。
    font=2
    用来指定字体的整数。一般font=1是正体,2是 黑体,3是 斜体,4是黑斜体。
    font.axis font.lab font.main
    font.sub
    分别用来指定坐标刻度、坐标轴标签、标题、小标题所用的字体。
    adj=-0.1
    指定文本相对于给定坐标的对齐方式。取0表示左对齐,取1表示右对齐,取0.5表示居中。此参数的值实际代表的是出现在给定坐标左边的文本的比例,所以adj=-0.1的效果是文本出现在给定坐标位置的右边并空出相当于文本10%长度的距离。
    cex=1.5
    指定字符放大倍数。
     


    二、坐标轴与坐标刻度
    许多高级图形带有坐标轴,还可以先不画坐标轴然后用axis()单独加。函数box() 用来画坐标区域四周的框线。
    坐标轴包括三个部件:轴线(用lty可以控制线型),刻度线,刻度标签。它们可以用如下的图形参数来控制:
    lab=c(5, 7, 12)
    第一个数为x轴希望画几个刻度线,第二个数为y轴希望画几个刻度线,这两个数是建议性的;第三个数是坐标刻度标签的宽度为多少个字符,包括小数点,这个数太小会使刻度标签四舍五入成一样的值。
    las=1
    坐标刻度标签的方向。0表示总是平行于坐标轴,1表示总是水平,2表示总是垂直于坐标轴。
    mgp=c(3,1,0)
    坐标轴各部件的位置。第一个元素为坐标轴位置到坐标轴标签的距离,以文本行高为单位。第二个元素为坐标轴位置到坐标刻度标签的距离。第三个元素为坐标轴位置到实际画的坐标轴的距离,通常是0。
    tck=0.01
    坐标轴刻度线长度,单位是绘图区域大小,值为占绘图区域的比例。tck小于0.5时x轴和y 轴的刻度线将统一到相同的长度。取1时即画格子线。取负值时刻度线画在绘图区域的外面。
    xaxs="s"
    yaxs="d"
    控制x轴和y轴的画轴方法。
    取值为"s"(即standard)或"e"(即extended)的时候数据范围控制在最小刻度和最大刻度之间。取"e"时如果有数据点十分靠近边缘轴的范围会略微扩大。这种画轴方式有时会在轴的一边留下太大的空白。
    取值为"i"(即internal)或"r"(此为缺省)使得刻度线都落在数据范围内部,而"r"方式所留的边空较小。
    取值设为"d"时会锁定此坐标轴,后续的图形都使用与它完全相同的坐标轴,这在要生成一系列可比较的图形的时候是有用的。要解除锁定需要把这个图形参数设为其它值。


    三、图形边空
    R画图常用图形 - zhangwei2039 - 闲云的博客
    S中一个单独的图由绘图区域(绘图的点、线等画在这个区域中)和包围绘图区域的边空组成,边空中可以包含坐标轴标签、坐标轴刻度标签、标题、小标题等,绘图区域一般被坐标轴包围。见图9。
    边空的大小由mai参数或mar参数控制,它们都是四个元素的向量,分别规定下方、左方、上方、右方的边空大小,其中mai取值的单位是英寸,而mai的取值单位是文本行高度。例如:
    > par(mai=c(1, 0.5, 0.5, 0))
    > par(mar=c(4, 2, 2, 1))
    这两个图形参数不是独立的,设定一个会影响另一个。S缺省的图形边空常常太大,以至于有时图形窗口较小时边空占了整个图形的很大一部分。通常我们可以取消右边空,并且在不用标题时可以大大缩小上边空。例如下例可以生成十分紧凑的图形:
    > oldpar <- par(mar=c(2,2,1,0.2))
    > plot(x,y)
    在一个页面上画多个图时边空自动减半,但我们往往还需要进一步减小边空才能使多个图有意义。
     


    四、一页多图
    R可以在同一页面开若干个按行、列排列的窗格,在每个窗格中可以作一幅图。每个图有自己的边空,而所有图的外面可以包一个“外边空”,见图10。
    一页多图用mfrow参数或mfcol参数规定,如:
    R画图常用图形 - zhangwei2039 - 闲云的博客
    > par(mfrow=c(3,2))
    表示同一页有三行两列共六个图,而且次序为按行填放。类似地,
    > par(mfcol=c(3,2))
    规定相同的窗格结构,但是次序为按列填放,即先填满第一列的三个再填第二列。要取消一页多图只要再运行
    > par(mfrow=c(1,1))
    即可。
    缺省时无外边空。为了规定外边空大小,可以用omi参数或oma参数。omi参数使用英寸为单位,oma参数以文本行高为单位,两个参数均为四个元素的向量,分别给出下、左、上、右方的边空大小。如:
    > par(oma=c(2,0,3,0))
    函数mtext用来在外边空加文字标注。其用法为
    mtext(text, side = 3, line = 0, outer = FALSE)
    其中text为要加的文本内容,side表示在哪一边写(1为下,2为左,3为上,4为右),line 表示边空从里向外数的第几行,最里面的一行是第0号,outer=TRUE时使用外边空,否则会使用当前图的边空。例如:
    > par(mfrow=c(2,2), oma=c(0,0,3,0), mar=c(2,1,1,0.1)) > plot(x);plot(y);boxplot(list(x=x,y=y));plot(x,y) > mtext("Simulation Data", outer=T, cex=1.5)
    在多图环境中还可以用mfg参数来直接跳到某一个窗格,比如
    > par(mfg=c(2,2,3,2))
    表示在三行两列的多图环境中直接跳到第二行第二列位置。mfg参数的后两个表示多图环境的行、列数,前两个表示要跳到的位置。
    可以不使用多图环境而直接在页面中的任意位置产生一个窗格来绘图,参数为fig,如:
    > par(fig=c(4,9,1,4)/10)
    此参数为一个向量,分别给出窗格的左、右、下、上边缘的位置,取值为占全页面的比例,比如上面的例子在页面的右下方开一个窗格作图。


    图形设备
    S作图支持各种图形设备,其中常用的是显示器和PostScript打印机。在一个S运行期间可以有多个图形设备同时存在。在R中,用
    > x11()
    打开图形窗口绘图,在S-PLUS中,用
    > win.graph()
    打开图形窗口绘图。再次调用这样的函数将打开第二个图形窗口。用
    > dev.list()
    可显示以打开的图形设备的列表。
    要关闭一个图形设备,用
    > dev.off()
    这可以使得图形得以完成,例如对于postscript设备关闭设备时可完成打印或存盘。用graphics.off() 函数可以关闭所有打开的图形设备。
    MS Windows下的R可以把显示窗口中的图形复制到剪贴板或存为各种格式的图形文件,包括WMF、PostScript、PNG、BMP、JPEG,这样我们可以用R生成所需图形然后存为需要的格式。MS Windows下的S-PLUS也具有类似功能。
    各版本的R和S-PLUS都支持生成PostScript图形的功能,生成的图形可以直接用于LaTeX 排版。如果用MS Word排版则可把屏幕图形存为WMF等格式。生成PostScript文件的设备可以用如下函数打开:
    > postscript(file="result1.ps", horizontal=FALSE, width=5, height=3)
    这时用图形命令生成一个页面的图形,然后用dev.off()关闭设备,则可生成文件result1.ps 。postscript()函数中horizotal参数指定是否将图旋转90度使得x轴平行于纸的长边,width 和height规定图的宽和高,单位是英寸。
    在打开了多个图形设备后可以用dev.set()函数来选择当前设备,dev.next()和dev.prev() 分别返回下一个和上一个图形设备。比如dev.set(dev.prev())选择上一个图形设备。
       
    R语言学习笔记
    分类: R 2012-11-22 08:59 448人阅读 评论(0) 收藏 举报
    参考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics, 2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html


    前言:关于R
    在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data analysis and visualization which is built based on S language.)。
    R的源起
    R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业 软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman 和 Ross Ihaka 及其他志愿人员开发了一个R系统。R的使用与S-PLUS有很多类似之处,两个软件有一定的兼容性。
    R is free
    R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
    R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输入,可实现分支、循环,用户可自定义功能。
    R是一个免费的自由软件,它有UNIX、LINUX、MacOS和WINDOWS版本,都是可以免费下载和使用的,在那儿可以下载到R的安装程序、各种外挂程序和文档。在R的安装程序中只包含了8个基础模块,其他外在模块可以通过CRAN获得。
    R的特点
    (1) 有效的数据处理和保存机制。
    (2) 拥有一整套数组和矩阵的操作运算符。
    (3) 一系列连贯而又完整的数据分析中间工具。
    (4) 图形统计可以对数据直接进行分析和显示,可用于多种图形设备。
    (5) 一种相当完善、简洁和高效的程序设计语言。它包括条件语句、循环语句、用户自定义的递归函数以及输入输出接口。
    (6) R语言是彻底面向对象的统计编程语言。
    (7) R语言和其它编程语言、数据库之间有很好的接口。
    (8) R语言是自由软件,可以放心大胆地使用,但其功能却不比任何其它同类软件差。
    (9) R语言具有丰富的网上资源
    一   入门训练
    1. 获取帮助
        > help.start() 开启帮助文档
        >help(solve) 显示某命令的帮助信息,或者
        >?solve
        对于由特殊字符指定的功能,这些参数必须用单引号或双引号括起来,使之成为一个“字符串”,如
        > help("[[")
        与某个主题相关的例子通常可以用下面的命令得到
        > example(topic)
    2. 命令简介
        R对大小写是敏感的;名称不能以数字开始;
        基本的命令由表达式或者赋值语句组成。如果一个表达式被作为一条命令给出,它将被求值、打印而表达式的值并不被保存。一个赋值语句同样对表达式求值之后把表达式的值传给一个变量,不过并不会自动的被打印出来;
        命令由分号(;)来分隔,或者另起新行;
        基本命令可以由花括号(f和g)合并为一组复合表达式;
        注释几乎可以被放在任何地方,只要是以井号( # )开始,到行末结束;
        如果一个命令在行莫仍没有结束,R将会给出一个不同的提示符,默认的是‘+’。
    3. 命令文件的执行和输出转向到文件
    如果命令存储于一个外部文件中,比如工作目录work中的commands.R,他们可以随时在R的任务中被执行
    > source("commands.R")在Windows中Source也可以由File菜单执行。
    函数sink,
    > sink("record.lis")
    将把所有后续的输出由终端转向一个外部文件,record.lis。命令
    > sink()   将把信息重新恢复到终端上。
    4. 数据的保持与对象的清除
    R所创建、操作的实体是对象。对象可以是变量、数组、字符串、函数以及由这些元素组成的其它结构;
    > objects()     用来显示目前存储在R中的对象的名字。而当前存储的所有对象的组合被称为workspace;
    清除对象可以使用rm命令:
    > rm(x, y, z, ink, junk, temp, foo, bar)
    所有在一个R任务中被创建的对象都可以在文件中被永久保存,并在其它的R任务中被使用。在每个R任务结束时用户都有机会保存当前有效的所有对象。如果用户这样做的话,对象将被写入当前目录一个名为.RData。当R被再次启动时R会从这个文件中再载入workspace。同时相关的命令记录也被载入。
    所以,推荐大家在用R进行不同的分析时分别使用不同的工作目录。
    5. 基本数据结构
     
    数值型(numeric)
    1,1.2,3.1415926
    复数型(complex)
    1+2i
    字符型(character)
    ‘A’/ “hello world!”
    逻辑型(logical)
    TRUE / FALSE
    6. 基本数据对象
    向量(vector), 见下节
    矩阵(matrix): 
    更一般的说数组是向量在多维情况下的一般形式。事实上它们是可以被两个或更多的指标索引的向量,并且以特定的方式被打印出来。
    因子(factors) 提供了一种处理分类数据的更简介的方式。
    列表(list):  
    是向量的一种一般形式,并不需要保证其中的元素都是相同的类型,而且其中的元素经常是向量和列表本身。
    数据框(data frame):
    是一种与矩阵相似的结构,其中的列可以是不同的数据类型。可以把数据框看作一种数据"矩阵",它的每行是一个观测单位,而且(可能)同时包含数值型和分类的变量。
    函数( function):
    能够在R的workspace中存储的对象。我们可以通过函数来扩展R的功能。
    二   简单操作,数值与向量
    2.1 向量与赋值
    R对命名了的数据结构进行操作。最简单的数据结构是数字向量;如,
    > x <- c(10.4, 5.6, 3.1, 6.4, 21.7)    c()是创建函数,赋值运算符是'<-',与函数assign()等价
    > assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))  也可以写成:
    > c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
    如果一个表达式被当作一个完整的命令,它的值将被打印到终端但不被储存。
    单独输入x则会将值打印出来。也可以打印倒数:
    > 1/x
    > y <- c(x, 0, x)   也可以将向量作为元素。
    2.2 向量运算
        操作是按照向量中的元素一个一个进行的。同一个表达式中的向量并不需要具有相同的长度。如果它们的长度不同,表达式的结果是一个与表达式中最长向量有相同长度的向量。表达式中较短的向量会根据它的长度被重复使用若干次(不一定是整数次),直到与长度最长的向量相匹配。而常数很明显的将被不断重复。如,
    > v <- 2*x + y + 1
    常用运算有:
    +,-,*,/,^(次方);
    log, exp, sin, cos, tan,sqrt等;
    max和min的作用是选出所给向量中最大的或最小的元素;
    range函数的值是一个长度为2的向量,即c(min(x),max(x))
    length(x)返回了向量x中元素的个数,也就是x的长度。
    sum(x)给出了x中所有元素的总和;
    prod(x)给出x中所有元素的乘积;
    mean(x)和var(x),分别计算样本均值和样本方差,这两个函数分别相当于sum(x)/length(x),sum((x-mean(x)) \^2)/(length(x) -1)。如果var()的参数是一个n*p的矩阵,那么函数的值是一个p*p的样本协方差矩阵,认为每行是一个p变量的样本向量。
    sort(x)返回一个与x具有相同长度的向量,其中的元素按招升序排列。还有其他更灵活的排序功能(参见order()和sort.list())。
    pmax和pmin将返回一个与最长的向量长度相等的向量,向量中的元素由参数中所有向量在相应位置的最大值(最小值)组成;
    如果要使用复数,需要直接给出一个复数部分。因此sqrt(-17)将会返回NaN(无效数值)和一个警告,而sqrt(-17+0i)将按照复数进行运算。
    2.3 生成序列
    最简单的方法是用冒号‘:’,冒号具有最高运算优先级。例如1:30就是向量c(1,2,. . .,29,30)。30:1构造一个递减序列。
    利用seq()函数构造序列:有五个参数,from, to, by, length, along
                                           from, to可以不写参数名,seq(2,10)就相当于2:10。
                                           by指定步长,默认为1,如seq(-5, 5, by=.2)即为c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0)
                                           length指定序列长度,如seq(length=51, from=-5, by=.2),等同于seq(-5, 5, by=.2)
                                           along=vector只能单独使用,产生一个“1:length(vector)”序列。类似的函数是rep(),这个函数可以用多种复杂的方法来                          
                                               复制一个对象。最简单的形式是> s5 <- rep(x, times=5)
    2.4 逻辑向量
    TRUE, FALSE, 和NA(not available), 前两个可以简写为T和F,但T/F并不是系统保留字,可以被用户覆盖,所以最好还是不要简写。
    逻辑向量是由条件给出的,如下列语句令temp成为一个与x长度相同,相应位置根据是否与条件相符而由TRUE或FALSE组成的向量:
    > temp <- x > 13
    逻辑操作符包括<, <=, >, >=,完全相等==和不等于!=,与或非分别为&, |, !。
    在普通运算中,FALSE当做0而TRUE当做1。
    2.5 缺失值
    NA(not available): 一般来讲一个NA的任何操作都将返回NA。
         is.na(x)返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。
         x==NA是一个与x具有相同长度而其所有元素都是NA的向量。
    NaN(Not a Number): 由数值运算产生,如0/0, Inf-Inf.
         is.na(x)对于NA和NaN值都返回TRUE,
         is.nan(x)只对NaN值返回TRUE。
    2.6 字符向量
    字符串在输入时可以使用单引号(')或双以号(");  在打印时用双引号(有时不用引号)。
    R使用与C语言风格基本相同的转义符, 所以输入\\打印的也是\\, 输入\" 打印引号",  \n: 换行, \t: tab, \b: 回格。
    字符向量可以通过函数c()连接;
    paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同。如果参数中包含数字的话,数字将被强制转化为字符串。在默认情况下,参数中的各字符串是被一个空格分隔的,不过通过参数sep=string 用户可以把它更改为其他字符串,包括空字符串。例如:
    > labs <- paste(c("X","Y"), 1:10, sep="")  使变量labs成为字符变量c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")
    2.7 index vector---数据集子集的选择与修改
    任何结果为一个向量的表达式都可以通过追加索引向量(index vector)来选择其中的子集。
    1 逻辑的向量。
    > y <- x[!is.na(x)]    表示将向量x中的非NA元素赋给y;
    > (x+1)[(!is.na(x)) & x>0] -> z     表示创建一个对象z,其中的元素由向量x+1中与x中的非缺失值和正数对应的向量组成。
    2. 正整数的向量
    > x[6]    是x的第六个元素
    > x[1:10]       选取了x的前10个元素(假设x的长度不小于10)。
    > c("x","y")[rep(c(1,2,2,1), times=4)]     产生了一个字符向量,长度为16,由"x", "y", "y", "x"重复4次而组成。
    3. 负整数的向量
    > y <- x[-(1:5)]       表示向量y取向量x前5个元素以外的元素。
    4. 字符串的向量
    只存在于拥有names属性并由它来区分向量中元素的向量。这种情况下一个由名称组成的子向量起到了和正整数的索引向量相同的效果。
    > fruit <- c(5, 10, 1, 20)
    > names(fruit) <- c("orange", "banana", "apple", "peach")
    > lunch <- fruit[c("apple","orange")]
    子集的修改
    > x[is.na(x)] <- 0    表示将向量x中所以NA元素用0来代替
    > y[y < 0] <- -y[y < 0]      表示将向量(-y)中 与向量y的负元素对应位置的元素 赋值给 向量y中 与向量y负元素对应的元素。作用相当于:
    > y <- abs(y)
    三  对象,模式和属性
    3.1 固有属性:模式和长度
    对象是R所进行操作的实体,对象可以是向量、列表等,详见1.6.
    对象的模式包括numeri,ccomplex,character,logical,list,function,expression等。可以用mode(object)查看。
    对象的长度是对象的另一固有属性。可以用length(object)查看。
    attribute(object)可以查看更深入的属性。
    模式的转换
    在允许的情况下(大多数情况都是允许的),R可以完成各种模式的转换。例如:d<-as.character(z),将数值向量z<-(0:9)转化为字符向量c("0", "1", "2", ..., "9")。as.integer(d)将d转化为数值向量。
    R中很多形式为as.something()的函数,可以完成从一个模式向另一个模式的转化,或者是令对象取得它当前模式不具有的某些属性。
    3.2 改变对象的长度
    > e <- numeric()    产生一个numeric型的空向量e。character()等类似。此时长度为对象0。
    此时新添加一个元素会使e的长度自动调整。
    > e[3] <- 17    令e为一个长度为3的向量(此时,该向量的前两个元素都是NA)
    缩短(截断)一个对象的长度,只需要一个赋值命令。因此,若alpha是一个长度为10的对象,下面的命令
    > alpha <- alpha[2 * 1:5]
    3.3 属性的获取和设置
    函数attributes(object)将给出当前对象所具有的所有非基本属性(长度和模式属于基本属性)的一个列表。
    函数attr(object,name)可以被用来选取一个指定的属性。除了为某些特殊的目的创建新属性这样特殊的环境下,这些函数很少被用到。
    当函数attr()用在赋值语句左侧时,既可以是将对象与一种新的属性关联,也可以是对原有属性的更改。例如
    > attr(z,"dim") <- c(10,10)         另R将z作为一个10X10的矩阵看待。
    3.4 对象的类别
    对象的一个特别属性,类别,被用来指定对象在R编程中的风格。比如:如果对象类别"data.frame"则会以特定方式处理。
    unclass()可以去除对象的类别。
    summary()可以查看对象的基本信息(min, max, mean, etc.)
    四  有序因子和无序因子
    因子是一种向量对象,它给自己的组件指定了一个离散的分类(分组),它的组件由其他等长的向量组成。R提供了有序因子和无序因子。
    通俗点说,因子就是将对象的值分成不同的组(levels)。
    用函数factor()创建一个因子,levels按序排列(字母序或数值序)。
    例如province<-c("四川","湖南","江苏","四川","四川","四川","湖南","江苏","湖南","江苏"),为province创建因子:
    > pf<-factor(province)   创建province的因子pf
    > pf     打印出来
     [1] 四川 湖南 江苏 四川 四川 四川 湖南 江苏 湖南 江苏
    Levels: 湖南 江苏 四川
    函数levels()可以用来观察因子中有多少不同的levels。
    假如我们拥有这些省份考生的分数:
    > score<-c(95,86,84,92,84,79,86,99,85,90)
    函数tappley()可以用来计算各省的平均分数,函数tapply()的作用是对它第一个参数的组件中所包含的每个组应用一个参数三指定的函数。
    > smeans<-tapply(score,pf,mean)
    > smeans
        湖南     江苏     四川 
    85.66667 91.00000 87.50000 
    再例如,下面命令会给出各组的length
    > tapply(score,pf,length)
    湖南 江苏 四川 
       3    3    4 
    函数ordered()可以创建有序因子
    > ordered(province)
     [1] 四川 湖南 江苏 四川 四川 四川 湖南 江苏 湖南 江苏
    Levels: 湖南 < 江苏 < 四川
    五 数组和矩阵
    5.1 数组
    数组可以看成一个由递增下标表示的数据项的集合,例如数值。
    数组的生成
    如果一个向量需要在R中以数组的方式被处理,则必须含有一个维数向量作为它的dim属性。
    维度向量由dim()指定,例如,z是一个由1500个元素组成的向量。下面的赋值语句
    > dim(z) <- c(3,5,100)        使它具有dim属性,并且将被当作一个3X5X100的数组进行处理。 c(3,5,100) 就是他的维度向量。
    还可以用到像matrix()和array()这样的函数来赋值。比如
    > array(1:20, dim=c(4,5))
    > matrix(1:24, 3,4)
    数据向量中的值被赋给数组中的值时,将遵循与FORTRAN相同的原则"主列顺序",即第一个下标变化的最快,最后的下标变化最慢。
    数组的运算
    数组可以在算数表达式中使用,结果也是一个数组,这个数组由数据向量逐个元素的运算后组成,通常参与运算的对象应当具有相同的dim属性。
    5.2 数组的索引和数组的子块
    数组中的单个元素可以通过下标来指定,下标由逗号分隔,写在括号内。
    我们可以通过在下标的位置给出一个索引向量来指定一个数组的子块,不过如果在任何一个索引位置上给出空的索引向量,则相当于选取了这个下标的全部范围。
    如a[2,,],a[,3,]等
    5.3 索引数组
    除了索引向量,还可以使用索引数组来指定数组的某些元素。
    例如:有4X5的数组a,若要得到a中的a[1,3], a[2,2] 和a[3,1]这三个元素,可以生成索引向量i,然后用a[i]得到它们。
    > a <- array(1:20,dim=c(4,5)) # Generate a 4 by 5 array.
    > i <- array(c(1:3,3:1),dim=c(3,2))
    > i
    [,1] [,2]
    [1,] 1 3
    [2,] 2 2
    [3,] 3 1
    > a[i]
    [1] 9 6 3
    > a[i] <- 0   # 将这三个元素用0替换。
    5.4 向量,数组的混合运算
    表达式从左到右被扫描;
    参与运算的任意对象如果大小不足,都将被重复使用直到与其他参与运算的对象等长;
    当较短的向量和数组在运算中相遇时,所有的数组必须具有相同的dim属性,否则返回一个错误;
    如果有任意参与运算的向量比参与运算的矩阵或数组长,将会产生错误;
    如果数组结构正常声称,并且没有错误或者强制转换被应用于向量上,那么得到的结果与参与运算的数组具有相同的dim属性。
    5.5 矩阵的运算
    构建分区矩阵:cbind()和rbind(),cbind()按照水平方向,或者说按列的方式将矩阵连接到一起。rbind()按照垂直的方向,或者说按行的方式将矩阵连接到一起。
    外积:操作符是%o%:
    > ab <- a %o% b   或者
    > ab <- outer(a, b, "*")
    其中的乘法操作可以由任意一个双变量的函数替代。
    广义转置:函数t(A),或aperm(A, c(2,1));
    获取行数/列数:nrow(A)和ncol(A)分别返回矩阵A的行数和列数。
    矩阵乘法:操作符为%*%;
    交叉乘积(cross product):crossprod(X,Y)等同于t(X) %*% y,crossprod(X)等价于crossprod(X, X);
    diag(v):如果v是向量,diag(v)返回一个由v的元素为对角元素的对角矩阵。
                   如果v为矩阵,diag(v)返回一个由v主对角元素组成的向量。
                   如果v只是一个数值,那么diag(v)是一个vXv的单位矩阵。
    特征值和特征向量:eigen(Sm)。这个函数的结果是由名为values和vectors的两部分组成的列表。如果只是需要特征值:eigen(Sm)$values
    最小二乘拟合即QR分解:lsfit(), qr()。
    强制转换为向量:as.vector(),或者直接c().
    解线性方程和求矩阵的逆,奇异值分解与行列式见<R语言笔记>;
    六  列表和数据帧
    6.1 列表
    列表是由称作组件的有序对象集合构成的对象。组件的模式或类型不一定相同。
    形如Lst <- list(name_1=object_1, . . ., name_m=object_m)的赋值将创建一个包含m个组件的列表,并根据参数中指定的名称为其命名。(其名称可以自由选取)。如果它们的名称被省略,组件将只是被编号。例如:
    > Lst <- list(name="Fred", wife="Mary", no.children=3,child.ages=c(4,7,9))
    所使用的组件是被复制到新的列表中的,对原始对象没有影响。
    组件总是被编号的,并且可以通过编号指定。
    Lst[[1]] 即为"Fred",也可以用 Lst$name,Lst[["name"]]指定。如果Lst[[4]]是一个有下标的数组,Lst[[4]][1]就是它的第一项。
    区分Lst[[1]]和Lst[1],'[[...]]'是选择单个元素时使用的操作符,而'[...]'是一个一般的下标操作符。因此,前者代表列表Lst中的第一个对象;后者是列表Lst的子列表,仅包含列表的第一项。
    组件的名称可以缩写,可缩写的程度是只要能令组件被唯一的识别就可以了。如:Lst$na等价于Lst$name, Lst$w等价于Lst$wife。
    扩展列表
    可以通过指定额外组件的方式。例如
    > Lst[5] <- list(matrix=Mat)
    连接列表
    当连接函数c()的参数为列表时,其结果也是一个模式为列表的对象。由参数中的列表作为组件依次连接而成。
    > list.ABC <- c(list.A, list.B, list.C)
    6.2 数据帧
    数据帧是类别为"data.frame"的列表;
    数据帧会被当作各列具有不同模式和属性的矩阵。
    数据帧按照矩阵的方式显示,选取的行或列也按照矩阵的方式来索引。
    创建数据帧
    直接创建:那些满足对数据帧的列(组件)限制的对象可以通过函数data.frame来构建成为一个数据帧
    > t <- data.frame(home=statef, loot=income, shot=incomef)
    强制转换:如果一个列表的组件与数据帧的限制一致,这个列表就可以通过函数as.data.frame()强制转化为一个数据帧。
    外部文件:创建数据帧最简单的方法应当是使用read.table()函数从外部文件中读取整个数据帧。
    数据帧和列表的限制
    1 组件必须是向量(数值型,字符形,逻辑型),因子,数值矩阵,列表,或其他数据帧;
    2 矩阵,列表,数据帧向新数据帧提供的变量数分别等于它们的列数,元素数和变量数;
    3 数值向量,逻辑值和因子在数据帧中保持不变,字符向量将被强制转化为因子,其水平是字符向量中所出现的值;
    4 数据帧中作为变量的向量结构必须具有相同的长度,而矩阵结构应当具有相同的行大小。
    挂接和卸载数据帧
    当觉得使用'$'引用数据帧元素(如't$home')麻烦时,可以进行数据帧挂接
    > attach(t)      这样可以直接引用数据帧内的元素,而无需'$',前提是数据帧外没有同名的变量(如name)。
    挂接后若要对数据帧元素进行赋值操作,仍需用'$',否则视为赋值给数据帧外的元素。
    赋值后必须要先卸载(detach)再重新挂接后,新值才可见。
    > detach(t)
    attach()是具有一般性的函数,即它不仅能够将目录和数据帧挂接在搜索路径上,还能挂接其他类别的对象。特别是模式为"list"的对象可以通过相同的方式挂接:
    > attach(any.old.list)     
    任何被挂接的对象都可以用detach来卸载,通过指定位置编号或者指定名称这样的方式.
    搜索路径
    函数search()将显示目前的搜索路径,可以用来查看数据帧/列表的挂接状态。
    ls()(或objects())命令可以用来检查搜索路径任意位置上的内容。如:ls(), ls(2), ls(t)
    R可以在搜索路径中包含至多20个项目,列表和数据帧只能在位置2或更靠后的位置上挂接。
    数据帧使用惯例
    1 将每个独立的,适当定义的问题所包含的所有变量收入同一个数据帧中,并赋予合适的、易理解、易辨识的名称;
    2 处理问题时,当相应的数据帧挂接于位置2,同时在第1层工作目录下存放操作的数值和临时变量;
    3 在结束一次工作之前,将你认为对将来有参考价值的变量通过$标记的形式添加到数据帧里面,然后detach();
    4 最后,将工作目录下所有不需要的变量剔除,并且尽量将剩下多余的临时变量都清除干净。
    这样我们可以很简单的在同一个目录下处理多个问题,而且对每个问题都可以使用x,y,z这样的变量名。
    七  从文件中读取数据
    7.1 函数read.table()
    该函数可以直接将文件中完整的数据帧读入。此时文件要符合特定的格式:
    1 第一行应当提供数据帧中每个变量的名称;
    2 每一行(除变量名称行)应包含一个行标号和各变量的值。
    3 若没有表头(变量名称行),也没有行标号,只有变量值,则默认变量名称为"v1","v2"...
    4 若有表头,但没有行标号,则可以指定参数header=TRUE.
    7.2 函数scan()
    该函数从键盘或文件中读取数据,并存入向量或列表中。
    > inp <- scan(file, what)
    第一个参数是文件名,如“test.txt”,若为“”或空,则从键盘读入数据;
    第二个参数用于确定读入数据的模式。  如:list("",0,0) 指定读入到列表中,列表有三项,且列表第一项是字符型,第二三项是数值型。若为0,则指定读入到一个数值向量中,若为“”则指定读入到字符向量中。
    7.3 内置数据集的读取
    R本身提供超过50个数据集,同时在功能包(包括标准功能包)中附带更多的数据集。与S-Plus不同,这些数据即必须通过data函数载入。
    > data()   #获得基本系统提供的数据集列表,然后通过形如
    > data(infert)    #来载入名为infert的数据集
    从其他package中载入数据集
    data(package="nls")      #查看nls中数据集
    data(Puromycin, package="nls")     #读取nls中Puromycin数据集。
    用library()挂接package后,它的数据集也自动包含到搜索路径中了。
    library(nls)    #载入package nls
    data()      #查看数据集
    date(Puromycin)    #载入Puromycin数据集
    7.4  编辑数据
    在使用一个数据帧或矩阵时,edit提供一个独立的工作表式编辑环境。
    > xnew <- edit(xold)       #对数据集xold进行编辑。并在完成时将改动后的对象赋值给xnew
    > xnew <- edit(data.frame())        #可以通过工作表界面录入新数据。
    fix()函数用于直接修改已有的对象,等价于  x<-edit(x).
    八 概率分布
    8.1 R是一个统计表集合(略读)
    R提供了一套完整的统计表集合。函数可以对累积分布函数P(X<=x),概率密度函数,分位函数(对给定的q,求满足P(X<=x) > q的最小x)求值,并根据分布进行模拟。


    对于所给的名称,加前缀'd'代表密度(density),'p'代表CDF,'q'代表分位函数,'r'代表模拟(随即散布)。这几类函数的第一个参数是有规律的,形为dxxx的函数为x,pxxx的函数为q,qxxx的函数为p,rxxx的函数为n(rhyper和rwilcox是特例,他们的第一个参数为nn)。目前为止,非中心参数(non-centrality parameter)仅对CDF和少数几个其他函数有效,细节请参考在线帮助。
    所有pxxx和qxxx的函数都具有逻辑参数lower.tail和log.p,而所有的dxxx函数都有参数log,这个是我们可以直接通过
    - pxxx(t, ..., lower.tail = FALSE, log.p = TRUE)
    获取,比如说,累积失效函数(cumulative/integrated hazard function),H(t) =-log(1-F(t)),以及更精确的对数似然(通过dxxx(..., log = TRUE))。
    此外,对于来自正态分布,具有学生化样本区间的分布还有ptukey和qtukey这样的函数。下面是一些例子
    > ## 2-tailed p-value for t distribution
    > 2*pt(-2.43, df = 13)
    > ## upper 1% point for an F(2, 7) distribution
    > qf(0.99, 2, 7)
    8.2 检测数据集的分布
    函数summary和fivenum这两个函数可以给出摘要,后者只给出数值;
    函数stem可以将数值统计结果以类似直方图的方式显示出来;
    函数hist()可以绘制直方图;
    函数density和line可以获得更漂亮的密度图;
    功能包fun中的ecdf函数能绘制经验累积分布函数;
    还可以进行拟合正态分布,覆盖拟合CDF;
    还可以绘制Quantile-quantile (Q-Q)图有助于我们更细致的检测其分布形态;
    8.3 单样本和两样本检验(略读)
    九  语句组、循环和条件操作
    R是一种表达式语言,也就是说其命令类型只有函数或表达式,并由它们返回一个结果。
    语句组由花括号‘{ }’确定,此时结果是该组中最后一个能返回值的语句的结果。
    条件语句
    > if (expr_1) expr_2 else expr_3 
    其中条件表达式expr1必须返回一个逻辑值,操作符&&和||经常被用于条件部分。
    &和|与&&,||的区别在于,&和|按照逐个元素的方式进行计算,&&和||对向量的第一个元素进行运算,只有在必需的时候才对第二个参数求值。
    if/else结构的向量版本是函数ifelse,其形式为ifelse (condition,a,b),产生函数结果的规则是:如果condition[i]为真,对应a[i]元素;反之对应的是b[i]元素。根据这个原则函数返回一个由a,b中相应元素组成的向量,向量长度与其最长的参数等长。
    循环语句
    > for (name in expr_1) expr_2
    其中name是循环变量,expr1是一个向量表达式(通常是1:20这样的序列),而expr2经常是一个表达式语句组,expr2随着name依次取expr1结果向量的值而被多次重复运行。
    > repeat(expr)
    > while(condition) expr
    break语句可以用来中断任何循环,可能是非正常的中断。而且这是中止repeat循环的唯一方式。
    next语句可以中止一个特定的循环,跳至下一个.
    十 编写自己的函数
    10.1 函数的定义
    > name <- function(arg_1, arg_2, ...) expression 
    expression是一个R表达式(通常是表达式语句组),并使用参数arg_i来计算出一个数值,表达式的值就是函数的返回值。
    函数调用的形式通常都是name(expr1,expr2,...)
    10.2 定义新的二元操作符
    可以将函数定义为新的二元操作符:
    > "%!%" <- function(X, y) { ... }
    正如矩阵乘法运算符,%*%,和矩阵外积运算符%o%
    10.3 指定参数和默认值
    如果被调用函数的参数按照"name = obj"的形式给出,那么参数的次序可以是任意的。
    而且,参数序列可以在开始依次序给出,而将指定名称的参数置于后面。
    因此,如果由一个函数fun1被定义为
    > fun1 <- function(data, data.frame, graph, limit) {
    [function body omitted]
    }
    那么函数可以有多种等价的使用方法,例如
    > ans <- fun1(d, df, TRUE, 20)
    > ans <- fun1(d, df, graph=TRUE, limit=20)
    > ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)
    默认值 :在很多情况下,参数都会被赋予一个普遍适用的默认值。
    > fun1 <- function(data, data.frame, graph=TRUE, limit=20) { ... }
    则函数可以这样被调用
    > ans <- fun1(d, df)
    此时与上面三种情况等价,也可以这样调用
    > ans <- fun1(d, df, limit=10)
    此时改变了一个默认值。
    NOTE:参数可以是任意表达式,甚至可以是包含其他参数的表达式;
    10.4 额外参数“...”
    当需要将一个函数的参数传递给另一个函数时,可以通过包含一个额外的参数"..."实现。
    fun1 <- function(data, data.frame, graph=TRUE, limit=20, ...) {
    [omitted statements]
    if (graph)
    par(pch="*", ...)
    [more omissions]
    }
    10.5 全局变量和局部变量
    函数内的赋值都是局部变量,退出函数就丢失了。
    如果要在函数内进行永久赋值(定义全局变量),需要用到“超赋值”操作符, <<-或者函数assign()。
    10.6 一些高级示例
    区组设计的效率因子 (E±ciency factors)
    删除打印数组中的所有名称
    递归的数值积分
    10.7 范畴(Scope)
    函数主体内出现的标识(symbol)可以被分为3类;正式参数、局部变量和自由变量。
    正式参数就是出现在函数参数列表中的参数,他们的值由实际的函数参数与正式参数的绑定(binding)过程决定。
    局部变量是在参数主体中,由表达式求值过程决定的变量。
    自由变量为既不是正式参数又不是局部变量的变量。赋值之后自由变量成为局部变量。
    在R中,自由变量的值由函数被创建的环境中与其同名的第一个变量值决定(我理解为最近的同名变量),这种方式被称为词汇式范畴(lexical scope)。
    而在S中,该值由同名的全局变量决定。
    例如下面的函数cube,在R中cube(2)=8,在S中报错为sq()找不到n。
    cube <- function(n) {
    sq <- function() n*n
    n*sq()
    }
    一个银行账户的例子,详见《R语言笔记》。
    10.8 定制环境
    详见《R语言笔记》。
    10.9 类别,通用函数和对象定位
    一个对象的类别(class)决定了他会如何被通用函数(generic function)处理。
    如果参数本身没有任何类别属性,或者其类别在特定问题中并不满足通用函数的要求,通常会有一个默认的动作被执行。
    类别机制使用户可以为特定的目的设计和编写通用函数。
    使用> methods(class="data.frame")可以查看数据帧的通用函数。
    使用> methods(plot)可以查看plot函数能处理的类别。
    十一   R的统计模型
    待阅。




    十二 图形过程
    在Windows下用window()命令可以打开图形窗口。
    12.1 高级绘图命令
        高级绘图函数,由函数参数提供数据生成一幅完整的图形。其中适当的坐标轴,标签和标题都自动生成了(除非你另外指定了)。高级绘图命令每次都生成一幅新的图形,清除当前的图形(如果需要的话)。
    1  plot()函数
    这是一个通用函数:生成图形的类型取决于第一个参数的类型或类别(class)。
    plot(x,y)  plot(xy):
    如果x,y是向量,plot(x,y)生成一幅y对x的散点图。用包含两个元素x,y的一个列表或一个两列的矩阵作为一个参数(第二种形式那样的)也能达成相同的效果。
    plot(x):
    如果x是一个时间序列,这个命令生成一个时间序列图,如果x是一个数值型向量,则生成一个向量值对它们向量索引的土,而如果x是一个复向量,则生成一个向量中元素的虚部对实部的图。
    plot(f)   plot(f,y):
    f是一个因子对象,y是一个数值型向量。第一种形式生成一个f的条形图;第二种形式生成y对应于f各个水平的箱线图。
    plot(df)   plot( expr)    plot(y expr):
    df是一个数据帧,y是任意对象,expr是由对象名称组成的列表,分隔符'+'(例如,a + b + c)。前两种形式生成分布式的图形,第一种是数据帧中的变量,第二种是一系列被命名的对象。第三种形式生成y对expr中每个对象的图。
    2 显示多元数据
    如果X是一个数值矩阵或数据帧,下面的命令
    > pairs(X) 
    生成一个配对的散点图矩阵,矩阵由X中的每列的列变量对其他各列列变量的散点图组成,得到的矩阵中每个散点图行、列长度都是固定的。
    当问题涉及到三、四个变量时,使用coplot更好些。如果a和b是数值向量,c是数值向量或因子对象(全都是相同长度的),下面的命令
    > coplot(a ~ b | c)
    对应c的某些给定值生成数个a对b的散点图。当c是一个因子时,这个命令也就是对c的每个水平生成a对b的散点图。当c是数值向量的时候,这个数值向量被分为一系列的条件区间(conditioning intervals),对应c的每个区间生成一个a对b的散点图。区间的数量和位置可以通过coplot()的参数given.values来控制,函数co.intervals()也可以用来选择区间。我们也可以使用两个给定变量通过命令
    >coplot(a ~ b | c+d)
    对c和d的每个联合条件区间生成a对b的散点图。
    函数coplot()和pairs()都可以使用参数panel=,这个参数可以用来定制我们得到的图形类型。默认的是points()函数,生成一个散点图,不过通过在参数panel=中提供某些其它的低级图形函数,我们可以生成需要的各种图形。一个很有用的函数例子是panel.smooth()。
    3 显示图形
    qqnorm(x)   qqline(x)    qqplot(x,y)
    分布比较图。第一种形式生成向量x对期望正态分数(一个正态记分图),第二个在上面的图上添加一条穿过分布分位点和数据分位点的直线。第三个命令生成x的分位点对y分位点图,用于分别比较它们的分布。
    hist(x)     hist(x,nclass=n)       hist(x,breaks=b, . . . )
    生成数值变量x的直方图。通常会自动选定一个合理的类别数,不过可以通过nclass=参数来指定一个推荐值。或者通过参数breaks=来指定分界点。如果给定了probability=TRUE参数,那么条形图代表相对频数而不是累计数。
    dotchart(x, . . . )
    创建一个x中数据的点图(dotchart)。点图中y轴给出x中数据的标签,x轴给出它们的值。它允许对落入某一特定区间的所有数据项方便的进行可视化选择。
    image(x,y,z, . . . )     contour(x,y,z, . . . )    persp(x,y,z, . . . )
    生成三个变量的图。函数image是用不同的颜色绘制一些矩形方格来展示z的值,函数contour通过绘制等高线来展示z的值,函数persp绘制一个3D面。
    4 参数配置
    add=TRUE      强制函数按照低级图形函数的方式操作,将图形置于当前图形上(仅对某些函数有效)。
    axes=FALSE       暂时禁止坐标轴的生成|以便使用axis()函数添加你自己定制的坐标轴。默认情况是axes=TRUE,即包含坐标轴。
    log="x"   log="y"   log="xy"      令x,y或者两者全都对数化。这个参数对许多函数都有效,不过不是全部。
    type=          参数type=控制所生成图形的类型:
            type="p" 绘制单独的点(默认值)
            type="l" 绘制线
            type="b" 绘制由线连接的点(both)
            type="o" 将点绘在线上
            type="h" 绘制从点到零轴的垂线(high-density)
            type="s" 阶梯式图。第一种形式中,点由垂线的顶部定义;第二种形式里用底部定义。
            type="n" 不绘制。不过坐标轴是绘出的(默认情况)而且要根据数据绘出坐标系统。用来给后续的低级图形函数创建图形作基础。
    xlab=string    ylab=string          x轴或y轴的标签。使用这些参数来改变默认的标签,通常的默认值是调用高级绘图函数时所使用对象的名称。
    main=string          图表标题,位于图形的顶部,大字体显示。 
    sub=string         子标题,位于x轴下面,用较小的字体显示。
    12.2   低级绘图命令
    有些时候高级绘图函数并不能很精确的生成我们想要的图形。这种情况下,我们可以通过低级绘图命令在当前图形上添加信息(例如,点、线或文本)。
    points(x,y)    lines(x,y)
    在当前图形上添加点或线。函数plot()的参数type=也可以用于这些函数(默认的是"p"代表points()和"l"代表lines())。
    text(x,y,labels, . . . )
    给定点坐标x,y,在该点添加文本。通常labels是一个整数或字符向量,其中labels[i]出现在点(x[i],y[i])。默认值是1:length(x)。
    Note: 这个函数通常用于这样的序列中
     > plot(x, y, type="n"); text(x, y, names)
    图形参数type="n"阻止了点的生成,但是建立了坐标轴,由函数text()提供字符向量names所指定的特定字符。
    abline(a, b)   abline(h=y)   abline(v=x)    abline(lm.obj)
    在当前图上添加一条斜率为b,截距为a的直线。h=y在图形指定的高度上绘制一条贯穿图形的水平线,同样的,v=x在x轴的指定位置绘制一条贯穿的垂线。而lm.obj是一个包含coefficients组件的列表,该组件的长度为2,分别当作截距和斜率。
    polygon(x, y, . . . )
    绘制一个多边形,其顶点由(x,y)指定。同时还(可选的)可以加上阴影线,如果图形设备允许的话还可以将多边形填充。
    legend(x, y, legend, . . . )
    这当前图形的指定位置添加图例。绘制的字符,线条类型,颜色等等由字符向量legend指定。除此之外至少还要给出一个参数v,与绘图单元的相应值,分别有:
    legend( , fill=v)填充方框的颜色
    legend( , col=v)绘制点线的颜色
    legend( , lty=v)线条类型
    legend( , lwd=v)线条宽度
    legend( , pch=v)绘制字符(字符向量)
    title(main,sub)
    在当前图形的顶部用大字题添加一个标题main,在底部用较小的字体添加子标题sub。
    axis(side, . . . )
    在当前图形的指定边上添加坐标,在哪个边上由第一个参数指定(1到4,从底部按照顺时针顺序)。其他参数控制坐标的位置|在图形内或图形外,以及标记的位置和标签。适合在调用参数为axes=FALSE的函数plot()后添加定制的坐标轴。
    低级绘图函数通常都需要一些位置信息(例如,x,y坐标)来决定在哪里添加新的元素。坐标以用户坐标(user coordinates)的形式给出,这个坐标系是根据所提供的数据由之前的高级绘图语句定义的。需要x,y参数的地方还可以选用一个单独的参数,即一个由名为x,y的元素组成的列表。相似的,一个两列的矩阵也可以。像locator()(后面会提到)这样的函数也可以按照这种方式交互的指定图形中的位置。
    添加数学注释
    某些情况下需要在图形中加入数学符号或公式。在R中可以通过在text, mtext,axis或title中指定一个表达式来实现。例如,下面的代码绘制了二项概率函数的公式:
    > text(x, y, expression_r(paste(bgroup("(", atop(n, x), ")"),p^x, q^{n-x})))
    更多的信息,包括其特性的一个完整列表可以在R中通过下面的命令得到:
    > help(plotmath)
    > example(plotmath)
    添加Hershey矢量字体
    > help(Hershey)
    > example(Hershey)
    12.3 图形的交互
    R提供了函数,使用户可以通过鼠标从图形中释放信息或添加信息。
    locator(n,type)
    等待用户使用鼠标左键在当前图形上选择位置。直到n(默认是512)个点都选完或者点击了鼠标另一个键(Unix,Windows),在Mac下用鼠标点击图形窗口外的部分也可以结束。参数type的效果和在高级绘图函数中使用时是一样的,即在选择的点绘制指定的图形。默认情况是不绘制图形。函数locator()将所选点的坐标返回到一个列表中,列表包含x,y两个组件。
    通常locator()在调用的时候并不带参数。这个功能在为图例或标签这样的图形元素选择位置时比较有用,尤其是这些位置不好通过计算得到的时候。举个例子,如果要在一个野点附近添加一些信息,可以使用下面的命令
    > text(locator(1), "Outlier", adj=0)
    identify(x, y, labels)
    允许用户在x,y(使用鼠标左键)定义的点附近绘制相应的labels的组件(如果没有给出labels就给出该点的序号),突显该点。当鼠标的另一个键被点击时(Unix,Windows)返回被选点的序号,在Mac下通过点击图形窗口外来实现这个效果。
    有时我们更想确定图形中的点,而非它们的位置。例如,我们可能希望从图示中选出某些感兴趣的观测点,然后进行某些操作。通过两个数值向量x,y给定一系列坐标(x; y),我们可以使用identify()函数:
    > plot(x,y) > identify(x,y)
    函数identify()本身不绘图,但是允许用户移动鼠标,在某点附近点击左键。离鼠标指针最近的点将被突显,并标出其序号(也就是它在向量x/y中的位置)。或者使用identify()的labels参数,把某些信息(例如案例名称)作为突显的标志;或者通过plot=FALSE参数取消所有突显标志。当选点的过程结束后,identify()返回所选点的序号;用户可以使用这些序号从x和y中释放所选的点。
    12.4 使用图形参数
    通过图形参数可以定制图形显示的几乎所有方面。R包含大量的图形参数,可以控制的包括线条类型,颜色,图标排列,文本对齐等等。
    1 持续性变更 (Permanent changes): par()函数
    通过par()函数设定图形参数的值会持续性的更改参数的值,也就是说这之后(在当前设备上)所有对图形函数的调用都受到新值的影响。
    函数par()用于存取和修改当前图形设备的图形参数列表。
    par()不带任何参数,返回当前设备所有图形参数和它们的值的列表。
    par(c("col","lty"))
    参数为一个字符向量,仅返回参数中指定的图形参数(也是作为一个列表)。
    par(col=4, lty=2)
    带指定参数(或一个列表型参数),设定指定图形参数的值,并将参数的原始值作为一个列表返回。
    所以如果想设定参数绘制一些图形后再恢复成原来的设定,可以这么做:
    > oldpar <- par(col=4, lty=2) 
    . . . plotting commands . . . 
    > par(oldpar)
    2 临时性变更:图形函数的参数
    图形参数也可以作为(几乎)所有图形函数的命名参数。这种方式的效果和用于par()函数的效果是一样的,只不过这种改变只在函数调用的区间内有效。比如:
    > plot(x, y, pch="+")
    生成一个以加号作为绘图符号的散点图,而不改变后续图形的默认的绘图符号。
    3 图形参数列表
    A  图形元素
    R图表由点、线、文本和多边形(填充区)组成。下面的图形参数控制了图形元素的绘制:
    pch="+" 用来绘点的字符。这个默认值随不同的图形驱动是不同的,不过通常都是'±'。除非使用"."作为绘图字符,否则绘制的点都会比适当的位置高一点或者低一点,而不是恰好在指定位置。
    pch=4当给定一个0到18的整数时,会生成一个特殊的绘图符号。通过下面的命令可以看这些符号都有什么。
    > legend(locator(1), as.character(0:18), pch=0:18)
    lty=2 线条类型。并不是所有图形设备都支持多种线条类型(在那些支持的设
    备上也不全一样),不过线条类型1始终是实线,2及以上的是点、划线或者它们的组合。
    lwd=2 线条宽度。所需的线条宽度,是"标准"线条宽度的倍数。对line()等函数绘制的线条和坐标轴都有效果。
    col=2 点、线、文本、填充区和图像使用的颜色。每种图形元素都有其可用的颜色列表,这个参数的值就是颜色在列表中的序号。显然,这个参数值对有限的一类设备有效。
    font=2 指定文本所使用字体的一个整数。如果可能的话,设备驱动会把1对应普通文本,2对应粗体,3对应斜体,4对应粗斜体。
    font.axis   font.lab    font.main   font.sub 这几个参数分别指定坐标轴注释,x,y轴的标签,主、副标题所用的字体。
    adj=-0.1 文本对齐和绘图位置有关。0代表左对齐,1代表右对齐,0.5代表水平的中间位置。当前的值使会图位置到左端距离的比例,所以-0.1在文本和绘图位置之间留10%的空白。
    cex=1.5 字符缩放。这个值是所需文本字符(包括绘图字符)的大小,与默认文本大小相关。
    B  坐标轴和标记
    很多R的高级图形都有坐标轴,你可以使用低级图形函数axis()自己创建坐标轴。坐标轴包含三个主要组件:轴线axis line(线条类型由参数lty控制),标记tick mark(沿着轴线划分单元),标号tick label(用来标出这些单元)。这些组件可以用下面这些参数定制。
    lab=c(5,7,12)前两个数字分别是x和y轴上所要划分的区间数。第三个数字是坐标轴标签的长度,用字符数来衡量(包括小数点)。参数的值如果选得太小可能导致所有标号都聚在一起。
    las=1 坐标轴标签的方向。0代表总是和坐标轴平行,1代表总是水平的,2代表总是垂直于坐标轴。
    mgp=c(3,1,0)坐标轴组件的位置。第一个组件是坐标轴标签到坐标轴的距离,单位是文本行(text lines)。第二个组件是到标号的距离,最后一个是轴的巍直到轴线的距离(一般都是0)。正数代表绘图区域外,负数代表区域内。
    tck=0.01 标号的长度,绘图区域大小的一个分数作单位。当tck比较小时(小于0.5),就强制x和y轴上的标记为相同大小。tck=1就是生成网格线。取负值时标记画向绘图区域外。内部标记可以使用tck=0.01和mgp=c(1,-1.5,0)。
    xaxs="s"   yaxs="d" 分别是x、y轴的类型。如果是s(standard)或e(extended)类型,那最大和最小的标记都始终在数据区域之外。如果有某个点离边界非常近,那么扩展型(extended)的轴会稍稍扩展一下。这种类型的轴有时会在边界附近留出大片空白。而i(internal)或r(默认值)类型的轴,标记始终在数据区域内,不过r类型会在边界留出少量空白。
    如果这个参数设为d,就锁定当前轴,对之后绘制的所有图形都用这个轴(直到参数被重新设定为其他的那几个值)。这个参数适用于生成一系列固定尺度的图。
    C  图边缘(Figure margins)
    在R中一个单独图形,图(figure),包含一个绘图区(plot region),以及环绕着这个区域的边缘(其中可能含有坐标轴标签、标题等等),(通常)这两部分以轴为边界。
    一个典型的图是


    控制图的样式的图形参数包括:
    mai=c(1,0.5,0.5,0)分别是底部,左侧,顶部,右侧的宽度,单位是英寸。
    mar=c(4,2,2,1)与mai相似,只是单位是文本行(text lines)。
    由于更改一个就会改变另一个的值,所以在这个意义上,mai和mar是等价的。这个参数的默认值通常都太大了;右侧边缘很少用到,如果没标题,顶部边缘也不需要,左侧和底部的边缘应当足够大,以容纳坐标轴和标号。此外,默认值并没有考虑到设备表面的大小:比如,使用postscript()驱动,height=4参数时,除非用mar,mai另外设定,否则图的边缘就要占上大约50%。使用多图环境时(后面会提到)。边缘会减少一半,不过这在多图共用一页的时候可能还不够。
    D 多图环境
    R允许在一页上创建一个n£m的图的阵列。每个图由自己的边缘,图的阵列还有一个可选的外部边缘,如下图所示。


    与多图环境相关的图形参数有:
    mfcol=c(3, 2)    mfrow=c(2, 4)
       设定多图阵列的大小。第一个值是行数,第二个值是列数。这两个参数唯一的区别是mfcol把图按列排入,mfrow把图按行排入。上图所示的版式可用mfrow=c(3,2)创建;上图显示的是绘制四幅图后的情况。
    mfg=c(2, 2, 3, 2)
        当前图在多图环境下的位置。前两个数字是当前图的行、列数;后两个是其在多图阵列中的行列数。这个参数用来在多图阵列中跳转。你甚至可以在后两个数中使用和真值(true value)不同的值,在同一页上得到大小不同的图。
    fig=c(4, 9, 1, 4)/10
        当前图在页面的位置,取值分别是左下角到左边界,右边界,下、上边界的距离与对应边的百分比数。给出的例子是一个页面右下角的图。这个参数可以设定图在页面的绝对位置。
    oma=c(2, 0, 3, 0)   omi=(0, 0, 0.8, 0)  
           外部边缘的大小。与mar和mai相似,第一个用文本行作单位,第二个以英寸作单位,从下方开始按照顺时针顺序指定。
    外部边缘对页标题这类东西很有用。文本可以通过带outer=TRUE参数的mtext()函数加入外部边缘。默认情况下是没有外部边缘的因此必须通过oma或omi指定。
    函数split.screen()和layout()可以对多个图形作更复杂的排列。
    12.6 设备驱动
    R几乎可以在任何一种类型的显示器和打印设备上生成(不同质量的)图形。不过,在这之前,需要告诉R要处理的是哪一种设备。这通过启动一个设备驱动来完成。
    设备驱动通过调用设备驱动函数来启动。
    某些常用的设备驱动有:
    X11()[Unix] 使用X11视窗系统
    windows()[Windows]   使用 Windows 视窗系统 
    postscript()在PostScript打印机上打印或者创建PostScript图形文件
    pictex()生成一个LATEX文件
    当一个设备使用完之后,可以通过下面的命令终止设备驱动
    > dev.off()
    这个命令可以确保设备已经结束;例如,在某些硬拷贝的设备中,这个命令可以保证每页都已经完成,并且都被传送到打印机了。
    PostScript文档
    通过给postscript()函数带上file参数,我们可以把图形以PostScript格式存储到文件中。如果没有给出horizontal=FALSE参数,图形是横向的,你可以通过width和height参数控制图形的大小(图形会自动适应)。例如,命令
    > postscript("file.ps", horizontal=FALSE, height=5, pointsize=10)
    为一个五英寸的图生成一个包含PostScript代码的文件,可以放在文当中。如果命令中的指定的文件名已经存在,将会被覆盖。
    多重图形设备
    每个对设备驱动的新调用都会打开一个新的图形设备,在设备列表中加入新的一项。这个设备就成为当前设备,图形输出就传送到这个设备。
    dev.list()      返回所有活动中设备的序号和名称。在列表位置1的设备始终是空设备(null device),这个设备不接收任何图形命令。
    dev.next()    dev.prev()     分别返回当前设备的后一个和前一个设备的序号和名称。
    dev.set(which=k)     用来把当前设备更改为设备列表中位置k的那个。返回设备的序号和标签。
    dev.off(k)    终止图形列表位置k的那个图形设备。对于某些设备,比如postscript,这个命令会立刻打印文件或者正常结束文件,具体怎样处理取决于设备是怎样初始化的。
    dev.copy(device,. . . ,which=k)      dev.print(device,. . . ,which=k)
    建立一个设备k的拷贝。其中device是一个设备函数,例如postscript,如果需要的话可以在'. . . '中指定其它的参数,dev.print效果相似,不过复制的设备会立刻关闭,所以打印硬拷贝这样的终止操作也会被立即执行。

    graphics.off()      终止列表中的所有图形设备,空设备除外。


    转自:http://blog.sina.com.cn/s/blog_6a02b6330101abn5.html

    展开全文
  • R语言绘图基础

    2020-11-17 21:46:57
    R语言绘图基础 #图形初阶 setwd(dir=“D:/Rcode”)#设置操作空间的路径 attach(mtcars)#对数据框进行绑定 plot(wt,mpg) abline(lm(mpg~wt)) title(“Regression of MPG on weight”) detach(mtcars)#对数据框解除...

    R语言绘图基础

    
    

    #图形初阶
    setwd(dir=“D:/Rcode”)#设置操作空间的路径
    attach(mtcars)#对数据框进行绑定
    plot(wt,mpg)
    abline(lm(mpg~wt))
    title(“Regression of MPG on weight”)
    detach(mtcars)#对数据框解除绑定
    #这里我们自己写一个数据框
    year<-c(2019:2010)
    major<-paste(“c”,1:10)
    set.seed(123)#设置随机种子。设置了随机种子每次的随机数时相同的。
    Pscore<-sample(40:50,10,replace=T)#replace=T表示产生的是整数
    Escore<-sample(50:60,10,replace=T)
    result<-data.frame(year,major,Pscore,Escore)
    result
    attach(result)
    plot(Pscore,Escore)
    abline(lm(Escore~Pscore))
    title(“regression of Escore on Pscore”)
    detach(result)
    pdf(“result.pdf”)#图片保存为pdf格式
    jpeg(“result.jpg”)#图片保存为jpg格式
    attach(result)
    plot(Pscore,Escore)
    abline(lm(Escore~Pscore))
    title(“regression of Escore on Pscore”)
    detach(result)
    dev.off()
    #通过plot()或者boxplotz()
    #来创建一幅新图形时,通常会覆盖掉先前的图形。
    #防止图形被覆盖的方法
    dev.new()#每次画图的时候新开一个窗口
    plot(Pscore,Escore)
    #3.2一个简单的例子,描述的是病人对两种药物不同剂量的响应
    dose<-c(20,30,40,45,60)
    drugA<-c(16,20,27,40,60)
    drugB<-c(15,18,25,31,40)
    #把这部分数据合成一个数据框
    mark<-data.frame(dose,drugA,drugB)
    dev.new()
    p1<-plot(dose,drugA,type=“o”)#type 有多个选项:b是线条+点,p表示加点
    #还有o,s,h,n类型可以分别跑一下看看
    jpeg(“p1.jpg”)
    ?plot
    #3.3图形参数
    #通过par()函数对图形参数的指定
    dev.new()
    ??par()
    opar<-par(no.readonly=T)#no.readonly=T这一步使得图形参数可改
    par(lty=“dashed”,pch=8)#参数lty的设置:可以用数字,
    #也可以用字符串,设置对应的规则如下
    #lty(0=blank, 1=solid (default), 2=dashed,
    #3=dotted, 4=dotdash, 5=longdash, 6=twodash)
    #or as one of the character strings
    #“blank”, “solid”, “dashed”, “dotted”,
    #“dotdash”, “longdash”, or “twodash”,
    plot(dose,drugA,type=“b”)
    par((opar))
    #pch设置不同的图形
    #cex设置par图形大小
    #lwd设置线条的粗细,默认值=1
    dev.new()
    plot(dose,drugA,type=“b”,lwd=4,pch=8,cex=4)
    #method 2
    dev.new()
    par(no.readonly=T,lty=6,lwd=3,pch=7,cex=2)
    plot(dose,drugA,type=“b”)
    #3.3.2颜色参数的设置
    #col默认的绘图颜色
    #col.axis坐标轴刻度文字的颜色
    #col.lab 坐标轴标签的颜色
    #col.main标题颜色
    #col.sub 副标题颜色
    #fg 图形的前景色
    #bg 图形的背景色
    #在R中,可以通过颜色下标,颜色名称,十六进制的颜色值,
    #RGB值或HSV来指定颜色
    #col=1,col=“white"col=”#FFFFFF"col=rgb(1,1,1)和col=hsv(0,0,1)
    #以上均是白色的不同表示方法
    colors()#用于返回所有的可用颜色的名称
    #R语言的在线图图表网站
    #http://rearch.stowers-institute.org/efg/R/Color/Chart
    #R中还有很多创建连续性颜色向量的函数:包括rainbow()
    #heat.colors(),terrain.colors(),topo.colors()以及cm.colors()
    install.packages(“RColorBrewer”)
    #RColorBrewer可以创建吸引人的颜色配对
    library(RColorBrewer)
    n<-7
    mycolors<-brewer.pal(n,“Set1”)
    barplot(rep(1,n),col=mycolors)
    brewer.pal.info
    #文本属性
    #cex对数值和标签等进行缩放
    #cex.axis 更改坐标轴刻度的缩放倍数
    #cex.lab 坐标轴标签的缩放倍数
    #cex.main 坐标轴标题的缩放倍数
    #cex.sub 坐标轴副标题的缩放倍数
    #font 更改字体的样式
    #3.3.4图形尺寸与边界尺寸
    #pin以英寸表示的图形
    #mai以数值向量表示边界大小,顺序为下左上右,单位为英寸
    #mar以数值向量表示边界大小,顺序为下左上右,单位为英分
    par(pin=c(4,3),mai=c(1,.5,1,2))#参数设置
    dose<-c(20,30,40,45,60)
    drugA<-c(16,20,27,40,60)
    drugB<-c(15,18,25,31,40)
    setwd(dir=“D:/Rcode”)
    dev.new()
    opar<-par(no.readonly=T)
    par(pin=c(2,3),mai=c(1,.5,1,2))
    par(lwd=2,cex=1.5)##lwd设置线条的粗细,默认值=1
    par(cex.axis=.75,font.axis=3)
    plot(dose,drugA,type=“b”,pch=19,lty=2,col=“red”)
    #plot(dose,drugB,type=“b”,pch=23,lty=6,col=“blue”,bg=“green”)
    #pch设置散点图形,lty设置线条类型
    par(opar)
    #3.4添加文本,自定义坐标轴和图例
    dev.new()
    plot(dose,drugA,type=“b”,
    col=“red”,lty=3,pch=9,lwd=2,
    main=“Clinical Trials for Drug A”,
    sub=“This is hypothetical data”,
    xlab=“Dosage”,ylab=“Drug Response”,
    xlim=c(0,60),ylim=c(0,70))
    #这里的xlab,ylab设置的坐标轴标题,xlim和ylim设置了x与y轴的范围。
    #3.4.1也可以使用title()函数为图形添加标题人和坐标轴标签
    #调用格式为
    #3.4.2坐标轴
    #可以利用axis()创建坐标轴
    #side一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
    #at 一个数值型向量,表示需要绘制刻度线的位置
    #labels 一个字符向量,表示至于刻度线旁边的文字标签(如果为NULL,直接用at
    #中的标签)
    #pos坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
    #lty线条类型
    #col线条与刻度线颜色
    #las 标签平行(las=0)或垂直(las=1)于坐标轴
    x<-c(1:10)
    y<-x
    z<-10/z
    opar<-par(no.readonly=T)
    par(mar=c(5,4,4,8)+0.1)
    plot(x,y,type=“b”,
    pch=21,col=“red”,
    yaxt=“n”,lty=3,ann=F)
    lines(x,z,type=“b”,pch=22,col=“blue”,lty=2)

    
    

    dose<-c(20,30,40,45,60)
    drugA<-c(16,20,27,40,60)
    drugB<-c(15,18,25,31,40)
    mark<-data.frame(dose,drugA,drugB)
    attach(mark)
    n1<-par(no.readonly=T)
    #颜色part
    dev.new()
    plot(dose,drugA,type=“b”,xlab=“dose”,ylab=“drugA”,col.axis=“red”,
    col.lab=“blue”,fg=“green”,bg=“pink”,
    main=“point figure”, sub=“dose”,col.main=“red”,
    col.sub=“blue”)
    #文本属性font必须是整数
    #font中1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体
    plot(dose,drugA,type=“b”,xlab=“dose”,ylab=“drugA”,font.axis=2,
    font.lab=2,font.main=2,font.sub=2,
    col.axis=“red”,
    col.lab=“blue”,fg=“green”,bg=“pink”,
    main=“point figure”, sub=“dose”,col.main=“red”,
    col.sub=“blue”)
    #缩放cex
    plot(dose,drugA,type=“b”,xlab=“dose”,ylab=“drugA”,font.axis=2,
    font.lab=2,font.main=2,font.sub=2,
    cex.lab=2,cex.main=4,cex.sub=0.5,cex.axis=2,
    col.axis=“red”,
    col.lab=“blue”,fg=“green”,bg=“pink”,
    main=“point figure”, sub=“dose”,col.main=“red”,
    col.sub=“blue”)
    #3.4.1标题函数的使用
    #title()
    dev.new()
    dose<-c(20,30,40,45,60)
    drugA<-c(16,20,27,40,60)
    drugB<-c(15,18,25,31,40)
    plot(dose,drugA,type=“b”,pch=9,lty=2,lwd=2)
    title(main=“Clinical Trials for Drug A”,
    sub=“This is hypothetical data”,
    cex.main=2.5,cex.sub=1.5,cex.lab=0.5,
    xlab=“Dosage”,ylab=“Drug Response”,
    col.main=“red”,col.sub=“blue”,
    col.lab=“blue”)#只能是col.lab而不能是col.xlab
    #坐标轴函数的使用
    #axis()的使用
    setwd(dir=“D:/Rcode”)
    #side是一个整数,1=下,2=左,3=上,4=右
    #at一个数值型向量,表示需要绘制刻度线的位置
    #lables一个字符型向量,表示置于刻度线旁边的文字标签
    #pos坐标抽绘制位置的坐标
    #lty线条类型
    #col线条和刻度线的颜色
    #las,tck等
    #实际的案例
    dev.new()
    x<-c(1:10)
    y<-x
    z<-10/x
    Epar<-par(no.readonly=T)#生成一个可供修改的图形参数列表
    par(mar=c(5,4,4,8)+0.1)
    plot(x,y,type=“b”,
    pch=21,col=“red”,
    yaxt=“n”,lty=3,ann=F)
    lines(x,z,type=“b”,pch=22,col=“blue”,lty=2)
    axis(4,at=z,labels=round(z,digits=2),
    col.axis=“blue”,las=2,cex.axis=0.7,tck=-0.01)
    mtext(“y=1/x”,side=4,line=3,cex.lab=1,las=2,col=“blue”)
    title(“An Example of Creative Axes”,
    xlab=“X values”,
    ylab=“Y=X”)
    par(Epar)
    #3.4.3参考线
    #函数abline()用于添加参考线
    abline(h=c(1,5,7))
    #表示在y为1,5,7的位置添加了水平实线
    #3.4.4图例
    #legend()函数可以用于添加图例
    #location指定图例位置
    #title图例标题的字符串
    #legend图例标签组成的字符型向量
    #图例的实例
    dev.new()
    dose<-c(20,30,40,45,60)
    drugA<-c(16,20,27,40,60)
    drugB<-c(15,18,25,31,40)
    opar<-par(no.readonly = T)
    par(lwd=2,cex=1.5,font.lab=2)#lwd表示线条的粗细
    plot(dose,drugA,type=“b”,
    pch=15,lty=1,col=“red”,ylim=c(0,60),
    main=“DrugA vs. DrugB”,
    xlab=“Drug Dosage”,ylab=“Drug Response”)
    lines(dose,drugB,type=“b”,
    pch=17,lty=2,col=“blue”)
    abline(h=c(30),lwd=1.5,lty=2,col=“grey”)
    library(Hmisc)
    install.packages(“Hmisc”)
    minor.tick(nx=3,ny=3,tick.ratio=0.5)
    legend(“topleft”,inset=.05,title=“Drug Type”,c(“A”,“B”),lty=c(1,2),
    pch=c(15,17),col=c(“red”,“blue”))
    par(opar)
    #3.4.5文本标注
    #可以通过text()和mtext()函数将文本添加到图形上。
    #text()可向绘制文本内添加文本
    #mtext()则是向图形的四个边界之一添加文本
    #案例
    dev.new()
    attach(mtcars)
    plot(wt,mpg,
    main=“Mileage vs. Car Weight”,
    xlab=“Weight”,ylab=“Mileage”,
    pch=18,col=“blue”)
    text(wt,mpg,
    row.names(mtcars),
    cex=0.6,pos=4,col=“red”)
    detach(mtcars)
    #示例2
    dev.new()
    opar<-par(no.readonly=T)
    par(cex=2)
    plot(1:7,1:7,type=“n”)
    text(3,3,“Example 1”)
    text(5,5,“Example 2”)
    text(6,6,“Example 3”)
    par(opar)
    #3.4.6数学标注
    #plotmath()可以实现为图形主题或边界上添加数学符号
    #3.5图形的组合
    #par()函数和layout()函数可以实现将多幅图组合为一幅图
    #案例实战
    dev.new()
    attach(mtcars)
    opar<-par(no.readonly=T)
    par(mfrow=c(2,2))#创建图形排列的行列mfrow=c(nrows,ncols)
    plot(wt,mpg,main=“Scatterplot of wt vs. mpg”)
    plot(wt,disp,main=“Scatterplot of wt vs. disp”)
    hist(wt,main=“Histogram of wt”)
    boxplot(wt,main=“Boxplot of wt”)
    par(opar)
    detach(mtcars)
    #示例2
    attach(mtcars)
    opar<-par(no.readonly=T)
    par(mfrow=c(3,1))
    hist(wt)
    hist(mpg)
    hist(disp)
    par(opar)
    detach(mtcars)
    #layout()函数
    #layout(mat),mat是一个矩阵,规定了每个图形的位置
    #示例3
    dev.new()
    attach(mtcars)
    layout(matrix(c(1,1,2,3),2,2,byrow=T))
    hist(wt)
    hist(mpg)
    hist(disp)
    detach(mtcars)
    #matrix(c(1,1,2,3),2,2,byrow=T)
    #为了更加精确地控制每一幅图的大小,可以有选择地在layout()函数中
    #使用widths和heights=两个参数
    dev.new()
    attach(mtcars)
    layout(matrix(c(1,1,2,3),2,2,byrow=T),widths=c(3,1),heights=c(1,2))
    hist(wt)
    hist(mpg)
    hist(disp)
    detach(mtcars)
    #图形布局的精细控制
    dev.new()
    opar<-par(no.readonly=T)
    par(fig=c(0,0.8,0,0.8))
    plot(mtcars w t , m t c a r s wt,mtcars wt,mtcarsmpg,
    xlab=“Miles Per Gallon”,
    ylab=“Car Weight”)
    par(fig=c(0,0.8,0.55,1),new=T)
    boxplot(mtcars w t , h o r i z o n t a l = T , a x e s = F ) p a r ( f i g = c ( 0.65 , 1 , 0 , 0.8 ) , n e w = T ) b o x p l o t ( m t c a r s wt,horizontal=T,axes=F) par(fig=c(0.65,1,0,0.8),new=T) boxplot(mtcars wt,horizontal=T,axes=F)par(fig=c(0.65,1,0,0.8),new=T)boxplot(mtcarsmpg,axes=F)
    mtext(“Enhanced Scatterplot”,side=3,outer=T,line=-3)
    par(opar)

    
    # 欢迎使用Markdown编辑器
    
    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
    
    ## 新的改变
    
    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
     1. **全新的界面设计** ,将会带来全新的写作体验;
     2. 在创作中心设置你喜爱的代码高亮样式,Markdown **将代码片显示选择的高亮样式** 进行展示;
     3. 增加了 **图片拖拽** 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
     4. 全新的 **KaTeX数学公式** 语法;
     5. 增加了支持**甘特图的mermaid语法[^1]** 功能;
     6. 增加了 **多屏幕编辑** Markdown文章功能;
     7. 增加了 **焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置** 等功能,功能按钮位于编辑区域与预览区域中间;
     8. 增加了 **检查列表** 功能。
     [^1]: [mermaid语法说明](https://mermaidjs.github.io/)
    
    ## 功能快捷键
    
    撤销:<kbd>Ctrl/Command</kbd> + <kbd>Z</kbd>
    重做:<kbd>Ctrl/Command</kbd> + <kbd>Y</kbd>
    加粗:<kbd>Ctrl/Command</kbd> + <kbd>B</kbd>
    斜体:<kbd>Ctrl/Command</kbd> + <kbd>I</kbd>
    标题:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd>
    无序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>U</kbd>
    有序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>O</kbd>
    检查列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>C</kbd>
    插入代码:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>K</kbd>
    插入链接:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>L</kbd>
    插入图片:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd>
    查找:<kbd>Ctrl/Command</kbd> + <kbd>F</kbd>
    替换:<kbd>Ctrl/Command</kbd> + <kbd>G</kbd>
    
    ## 合理的创建标题,有助于目录的生成
    
    直接输入1次<kbd>#</kbd>,并按下<kbd>space</kbd>后,将生成1级标题。
    输入2次<kbd>#</kbd>,并按下<kbd>space</kbd>后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用`TOC`语法后生成一个完美的目录。
    
    ## 如何改变文本的样式
    
    *强调文本* _强调文本_
    
    **加粗文本** __加粗文本__
    
    ==标记文本==
    
    ~~删除文本~~
    
    > 引用文本
    
    H~2~O is是液体。
    
    2^10^ 运算结果是 1024.
    
    ## 插入链接与图片
    
    链接: [link](https://www.csdn.net/).
    
    图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw)
    
    带尺寸的图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw =30x30)
    
    居中的图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center)
    
    居中并且带尺寸的图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center =30x30)
    
    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
    
    ## 如何插入一段漂亮的代码片
    
    去[博客设置](https://mp.csdn.net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`.
    ```javascript
    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。1

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. 注脚的解释 ↩︎

    展开全文
  • 0 积分下载;文件大小:1.1 M;深圳华大基因研究院研究人员2012年出品,彩色39页的pdf格式幻灯片。
  • 使用R语言高级绘图函数对金融领域的数据进行绘图并做简单分析。 数据:金融案例数据 获取数据: getwd() setwd('D:\\') FinRatio <- read.csv("financial ratio.csv", header= T,stringsAsFactors=F, na.strin....

    任务:
    使用R语言高级绘图函数对金融领域的数据进行绘图并做简单分析。
    R语言高级图形函数用的参数

    数据:金融案例数据
    获取数据:

    getwd()
    setwd('D:\\')
    FinRatio <- read.csv("financial ratio.csv",
                         header= T,stringsAsFactors=F,
                         na.strings= "")#加载文件 
    

    数据处理:

    FinRatio$Debt.to.Assets.Ratio <- as.numeric(FinRatio$Debt.to.Assets.Ratio,  
                                                na.rm=T) #移除na数据 
    FinRatio$ROA <- as.numeric(FinRatio$ROA,na.rm=T)#移除na数据
    FinRatio$Total.Assets.Turnover <- as.numeric(FinRatio$Total.Assets.Turnover,  
                                                na.rm=T) #移除na数据 
    FinRatio$Cash.Ratio <- as.numeric(FinRatio$Cash.Ratio,  
                                                na.rm=T) #移除na数据 
    

    #1)多组散点图,分为 st 和非 st 上市公司

    FinRatio$group <- as.factor(FinRatio$group)#转换成因子类型
    par(mfcol = c(1,1))
    # par(mforw=c(3,2))
    # 则是在同一绘图区中绘制3行2列共6个图形,而且是先按行绘制,
    #即绘制完第1行的2个图形后,再绘制第2行的2个图形,最后是第3行的2个图形。
    # par(mfcol=c(3,2))
    # 也是绘制3行2列共6个图形,与上面不同的是,先按列绘制。
    #即先绘制完第1列的3个图形,再绘制第2列的3个图形。
    FinRatio$a<-runif(2780,min=0,max=1)
    #runif(n,min=0,max=1)--n表示生成的随机数数量,min表示均匀分布的下限,
    #max表示均匀分布的上限;若省略参数min、max,则默认生成[0,1]上的均匀分布随机数。
    m <-FinRatio[order(FinRatio$a),]
    #order返回的是一个permutation。
    #也就是说,把数从小到大排序的话,当前位置的数会排在第几个。
    #plot(m$Debt.to.Assets.Ratio,m$ROA.,pch=as.integer(m$group),col=c(1:4))
    plot(m$Debt.to.Assets.Ratio,m$ROA.,pch=as.integer(m$group))
    # as.integer,将数据特别标明是integer类型。
    # integer类型的数据主要是为了存储和计算更省空间,以及方便和其他语言保持一致
    #pch缺省下设定数据显示为点状。pch 符号可以使用0 : 25来表示26 个标识
    #如pch=23设定数据点显示形状为菱形;当pch=0时不显示任何符号;
    

    运行结果:
    在这里插入图片描述
    本来想让st 公司一个颜色和非 st 上市公司为另一个颜色,然而莫有做到。。

    plot(m$Debt.to.Assets.Ratio,m$ROA.,pch=as.integer(m$group),col=c(1:26))
    

    运行结果:
    在这里插入图片描述

    #2) 多变量散点图

    #head(FinRatio) #head(dataframe)——查看数据集前6行数据 
    plot(FinRatio[,1:4],col=c(1:26))  
    

    运行结果:
    在这里插入图片描述
    #3)散点图+平滑线

    plot(m$Debt.to.Assets.Ratio,m$ROA.)  
    lines(lowess(m$Debt.to.Assets.Ratio,m$ROA.),col='red',lwd=3)
    #lowess--局部加权回归散点平滑算法。
    

    运行结果:
    在这里插入图片描述
    #4)箱线图

    FinRatio1  <- FinRatio[complete.cases(FinRatio),]
    plot(FinRatio1[,5],FinRatio1$Debt.to.Assets.Ratio,type='l', xlab="group", ylab="Debt.to.Assets.Ratio") 
    

    运行结果:
    在这里插入图片描述

    plot(FinRatio1[,5],FinRatio1$ROA,type='l',xlab="group", ylab="ROA")
    

    运行结果:
    在这里插入图片描述

    plot(FinRatio1[,5],FinRatio1$Total.Assets.Turnover,type='l',xlab="group", ylab="Total.Assets.Turnover")
    

    运行结果:
    在这里插入图片描述

    plot(FinRatio1[,5],FinRatio1$Cash.Ratio,type='l',xlab="group", ylab="Cash.Ratio")
    

    运行结果:
    在这里插入图片描述

    展开全文
  • R语言绘图渐进

    千次阅读 2016-04-05 15:01:00
    案例01-基本绘图 cars plot(cars) 案例 1-基本绘图 案例02-增添标题 cars plot(cars, type="o", col="blue") # 绘制蓝色折线图, title(main="Autos", col.main="red", font.main=4) # 增添标题
  • R语言绘图函数

    千次阅读 2018-04-04 16:42:05
    而这里可以对它们设置一个向量,这个向量的值将依次运用到各个元素上,若向量长度短于元素个数,那么向量会被循环使用,直到所有的元素都被画出来,事实上,向量的循环使用也是R图形参数的一大特点。 2. layout() ...
  • R语言绘图基础 WOT峰会讲师,中国R语言大会讲师,数据分析师,8年以上数据...
  • 方便熟悉R语言作图,有作图实例以及代码,和数据的最终展示。
  • 学好R语言绘图,你只需这样一个网站就够了

    千次阅读 多人点赞 2020-04-19 09:35:08
    你们是否有超级羡慕那些能做一手好图的人,俗语有云一图胜千言,做了一手好图很容易提升我们文章的逼格。所以我也常常在想,网络上有那种可视化的示例代码和示例...r-garp-gallery收入了大量利用R语言绘制的图形,...
  • R语言学习-第二天-用R绘图 参考文献:《R Graph Cookbook》、《R-modeling》 1.绘图函数 1.直方图 对于第一天的案例练习 hist(x$x1) 2.散点图 plot(x$x1,x$x2) 列联表分析每个分数有多少人 table...
  • R语言绘图底层系统之Grid包

    千次阅读 2018-10-26 11:36:00
    作者简介曹洋洋:R语言爱好者。
  • ## 条形图 barplot ## ##################################### #输入的数据是向量 getwd() setwd("/Users/marscolono/Desktop/Macmini 工作数据包/R代码整理/R语言绘图配套资料") m ("Rdata/homo_length.csv",header...
  • 我们知道ggplot2工具包有很多方便的拼图拓展包,如cowplot、patchwork等,而本篇就来介绍在使用R语言的基础绘图系统如何进行拼图。需要明确的是,基础绘图系统的拼图功能不需要...
  • R 语言绘图002-页面布局

    千次阅读 2016-01-09 11:08:55
    而这里可以对它们设置一个向量,这个向量的值将依次运用到各个元素上,若向量长度短于元素个数,那么向量会被循环使用,直到所有的元素都被画出来,事实上,向量的循环使用也是R图形参数的一大特点。 2. ...
  • matplotlib绘图案例

    千次阅读 2017-03-07 16:03:59
    而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。 它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本
  • ggplot2包提供了绘制箱型图的函数,与R语言中的基础绘图结果存在差异。 使用基础绘图函数boxplot与ggplot2绘制的箱型图 ggplot2中主要是用到了geom_boxplot()函数,同时包含添加箱须的stat_boxplot()函数,具体以...
  • 而这里可以对它们设置一个向量,这个向量的值将依次运用到各个元素上,若向量长度短于元素个数,那么向量会被循环使用,直到所有的元素都被画出来,事实上,向量的循环使用也是R图形参数的一大特点。 2. layout():...
  • 绘图结果不可赋给一个对象,而是直接输出到一个“绘图设备”上,而绘图设备是一个绘图的窗口或是文件 绘图函数分为:高级绘图函数和低级绘图函数。其中,高级绘图函数创建新图形,而低级绘图函数在现存的图形上添加...
  • R软件学习笔记-5(R语言绘图

    千次阅读 2015-05-16 20:50:14
    次运用到各个元素上,若向量长度短于元素个数,那么向量会被循环使用,直到所有的元素都被画出来,事实上,向量的循环使用也是R图形参数的一大特点。 案例一: attach(mtcars) opar(no.readonly=TRUE)#保存默认...
  • 一个r语言数据分析案例(里面有代码和论文报告),包括对数据的绘图、线性回归和非线性回归,模型的拟合优度,模型的数据预测等等。
  • r语言基础教程(觉得干货!):r语言基础知识 本次数据分析案例结合全国人口数据,首先进行线性回归分析,分析模型的拟合优度,再通过线性回归模型预测未来人口。 本文完整论文报告下载地址(附代码和数据):人口...
  • 本课程旨在帮助学习者快速入门R语言: ... 课程通过大量的案例详细地介绍了如何使用R语言进行数据分析和处理 课程操作实际案例教学,通过编写代码演示R语言的基本使用方法和技巧 ...
  • 本课程旨在帮助学习者快速入门R语言: ... 课程通过大量的案例详细地介绍了如何使用R语言进行数据分析和处理 课程操作实际案例教学,通过编写代码演示R语言的基本使用方法和技巧 ...
  • 本课程旨在帮助学习者快速入门R语言: ... 课程通过大量的案例详细地介绍了如何使用R语言进行数据分析和处理 课程操作实际案例教学,通过编写代码演示R语言的基本使用方法和技巧 ...
  • 本课程旨在帮助学习者快速入门R语言: ... 课程通过大量的案例详细地介绍了如何使用R语言进行数据分析和处理 课程操作实际案例教学,通过编写代码演示R语言的基本使用方法和技巧 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,612
精华内容 1,444
关键字:

r语言绘图案例