R action 6

20171225(从有道迁移)

基本图形

  1. 条形图

    1. 简单条形图:

      1. 通过垂直的或水平的条形展示了类别型变量的分布(频数)
      2. 语法:barplot(height), 其中的height是一个向量或一个矩阵
      3. 选项horiz=TRUE会生成一幅水平条形图
      4. 选项main可添加一个图形标题,选项xlab和ylab则会分别添加x轴和y轴标签
      library("vcd")
      counts <- table(Arthritis$Improved)
      barplot(counts,main="Simple Bar Plot",xlab="Imporvement",ylab="Frequency")
      
      
    2. 堆砌条形图和分组条形图

      1. 如果height是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。
      2. 若beside=FALSE(默认值),则矩阵中的每一列都将生成图中的一个条形,各列中的值将给出堆砌的“子条”的高度。
      3. 若beside=TRUE,则矩阵中的每一列都表示一个分组,各列中的值将并列而不是堆砌
      --堆砌条形图
      barplot(counts,main="Stacked Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts))
      
      --分组条形图
      barplot(counts,main="Stacked Bar Plot",xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend=rownames(counts),beside=TRUE))
      
      --对legend的遮挡结果进行处理,设置xlim,heargs.legnd的参数值
      barplot(counts,main="Stacked Bar Plot",xlim=c(0, ncol(counts) + 1.5),xlab="Treatment",ylab="Frequency",col=c("red","yellow","green"),legend.text=rownames(counts), args.legend=list(x=ncol(counts) + 1.5,y=max(colSums(counts)),bty = "n"))
      
    3. 均值条形图

      1. 条形图并不一定要基于计数数据或频率数据。
      2. 可以使用数据整合函数并将结果传递给barplot()函数,来创建表示均值、中位数、标准差等的条形图
      states <- data.frame(state.region,state.x77)
      means <- aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
      means <- means[order(means$x),]
      barplot(means$x,names.arg=means$Group.1)
      
    4. 条形图的微调

      1. cex.names调整字号
      2. names.arg你指定一个字符向量作为条形的标签名
      3. par()函数也可以对图形进行微调
      4. 详细参数可以查看barplot的帮助文档
    5. 为棘状图(spinogram)

      1. 棘状图对堆砌条形图进行了重缩放,这样每个条形的高度均为1,每一段的高度即表示比例。
      2. 棘状图可由vcd包中的函数spine()绘制。
  2. 饼图

    1. 饼图函数:pie(x,labels),其中x是一个非负数值向量,表示每个扇形的面积,而labels则是表示各扇形标签的字符型向量。
    2. 示例:
    --图形设置,这样四幅图形就会被组合为一幅
    par(mfrow=c(2,2))                             
    slices <- c(10, 12,4, 16, 8) 
    lbls <- c("US", "UK", "Australia", "Germany", "France")
    
    pie(slices, labels = lbls, main="Simple Pie Chart")
    
    pct <- round(slices/sum(slices)*100)            
    lbls2 <- paste(lbls," ",pct,"%",sep="")
    pie(slices,labels = lbls, col=rainbow(length(lbls)),
        main="Pie Chart with Percentages")
    
    library(plotrix)                                               
    pie3D(slices, labels=lbls,explode=0.1, main="3D Pie Chart ")
    
    mytable <- table(state.region)                                   
    lbls3 <- paste(names(mytable), "\n", mytable, sep="")
    pie(mytable, labels = lbls3, 
        main="Pie Chart from a dataframe\n (with sample sizes)")
    
    par(opar)
    
    1. 扇形图:是通过plotrix包中的fan.plot()函数实现的

      fan.plot(slices,labels=lbls,main="Simple Fan Chart")

  3. 直方图

    1. 在X 轴上将值域分割为一定数量的组,在Y轴上显示相应值的频数,展示了连续型变量的分布;
    2. 函数:hist(x)
      1. x是一个由数据值组成的数值向量
      2. 参数freq=FALSE表示根据概率密度而不是频数绘制图形
      3. 参数breaks用于控制组的数量
      4. 在定义直方图中的单元时,默认将生成等距切分。
    3. 示例
    # simple histogram                                   
    hist(mtcars$mpg)
    
    # colored histogram with specified number of bins
    # 将组数指定为12,使用红色填充条形      
    hist(mtcars$mpg, 
         breaks=12, 
         col="red", 
         xlab="Miles Per Gallon", 
         main="Colored histogram with 12 bins")
    
    # colored histogram with rug plot, frame, and specified number of bins 
    
    # 在上图的基础上叠加了条密度曲线和轴须图(rug plot)。这条密度曲线是一个核密度估计,它为数据的分布提供了一种更加平滑的描述。
    # 轴须图是实际数据值的一种一维呈现方式。
    # 如果数据中有许多结(数据中出现相同的值,称为结),可以使用rug(jitter(mtcars$mpg,amount=0.02)) 将轴须图的数据打散:
    
    #使用lines()函数叠加了蓝色、双倍默认线条宽度的曲线
    
    hist(mtcars$mpg, 
         freq=FALSE, 
         breaks=12, 
         col="red", 
         xlab="Miles Per Gallon", 
         main="Histogram, rug plot, density curve")  
    rug(jitter(mtcars$mpg)) 
    lines(density(mtcars$mpg), col="blue", lwd=2)
    
    # histogram with superimposed normal curve (Thanks to Peter Dalgaard)  
    
    #在图2叠加在上面的正态曲线和一个将图形围绕起来盒型
    x <- mtcars$mpg 
    h<-hist(x, 
            breaks=12, 
            col="red", 
            xlab="Miles Per Gallon", 
            main="Histogram with normal curve and box") 
    xfit<-seq(min(x),max(x),length=40) 
    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)
    box()
    
  4. 核密度图

    1. ==核密度估计==是用于估计随机变量概率密度函数的一种非参数方法;
    2. 函数plot(density(x))
      1. x是一个数值型向量。
      2. plot()函数会创建一幅新的图形,向一幅已经存在的图形上叠加一条密度曲线,可以使用lines()函数
    3. 示例
    # returns the density data  
    d <- density(mtcars$mpg) 
    # plots the results 
    plot(d) 
    
    #将曲线修改为蓝色,使用实心红色填充了曲线下方的区域,并添加了棕色的轴须图。
    plot(d, main="Kernel Density of Miles Per Gallon")       
    #polygon()函数根据顶点的x和y坐标(本例中由density()函数提供)绘制了多边形
    polygon(d, col="red", border="blue")                     
    rug(mtcars$mpg, col="brown") 
    
    1. 核密度图可用于比较组间差异,用sm包中的sm.density.compare()函数可向图形叠加两组或更多的核密度图。使用格式为sm.density.compare(x,factor)
      1. x是一个数值型向量
      2. factor是一个分组变量
      3. 示例:
      #比较拥有4个、6个或8个汽缸车型的每加仑汽油行驶英里数
      
      #将所绘制的线条设置为双倍宽度
      par(lwd=2)                                                       
      library(sm)
      attach(mtcars)
      
      # create value labels 
      # 变量cyl是一个以4、6或8编码的数值型变量
      # 为了向图形提供值的标签,这里cyl转换为名为cyl.f的因子
      cyl.f <- factor(cyl, levels= c(4, 6, 8),                         
                      labels = c("4 cylinder", "6 cylinder", "8 cylinder")) 
      
      # plot densities 
      sm.density.compare(mpg, cyl, xlab="Miles Per Gallon")                
      title(main="MPG Distribution by Car Cylinders")
      
      # add legend via mouse click
      colfill<-c(2:(2+length(levels(cyl.f)))) 
      cat("Use mouse to place legend...","\n\n")
      
      #参数值locator(1)表示用鼠标点击想让图例出现的位置来交互式地放置这个图例
      legend(locator(1), levels(cyl.f), fill=colfill) 
      detach(mtcars)
      par(lwd=1)
      
  5. 箱线图

    1. 通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布
    2. 箱线图能够显示出可能为离群点(范围±1.5*IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测
    3. 函数:boxplot(x) ; 示例:boxplot(mtcars$mpg,main="Box Plot",ylab="Miles Per Gallon")
    4. 执行boxplot.stats(mtcars$mpg)即可输出用于构建图形的统计量
    5. 使用并列箱线图进行跨组比较,格式:```boxplot(formula,data=dataframe)
      1. formula是一个公式。示例公式:
        • 公式y ~A,将为类别型变量A的每个值并列地生成数值型变量y的箱线图。
        • 公式y ~ A*B,将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图
      2. dataframe代表提供数据的数据框(或列表)。
      3. 参数varwidth=TRUE将使箱线图的宽度与其样本大小的平方根成正比。
      4. 参数horizontal=TRUE可以反转坐标轴的方向
      5. 通过添加notch=TRUE,可以得到含凹槽的箱线图
      6. 示例:
      boxplot(mpg~cyl,data=mtcars, varwidth=TRUE,col="red",main="Car Mileage Data", xlab="Number of Cylinders",ylab="Miles Per Gallon")
      
      # 含凹槽的箱线图
      boxplot(mpg~cyl,data=mtcars, notch=TRUE, varwidth=TRUE,col="red",main="Car Mileage Data", xlab="Number of Cylinders", ylab="Miles Per Gallon")
      
      # 个分组因子绘制箱线图
       boxplot(mpg ~ am.f * cyl.f ,data=mtcars, varwidth=TRUE,col=c("gold","darkgreen"),main="MPG Distribution by Auto Type",xlab="Auto Type")
      
      
  6. 小提琴图

    1. 小提琴图(violin plot)是箱线图变种;
    2. 小提琴图是箱线图与核密度图的结合;
    3. 使用vioplot包中的vioplot()函数绘制;
    4. 格式:vioplot(x1,x2,...,names=,cols=)
      1. x1,x2,…表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图);
      2. 参数names是小提琴图中标签的字符向量;
      3. col是一个为每幅小提琴图指定颜色的向量。
    5. 示例
    install.packages("vioplot")
    library("vioplot")
    
    x1 <- mtcars$mpg[mtcars$cyl==4]
    x2 <- mtcars$mpg[mtcars$cyl==6]
    x3 <- mtcars$mpg[mtcars$cyl==8]
    
    vioplot(x1,x2,x3,names=c("4 cyl","6 cyl","8 cyl"),col="gold")
    
    
  7. 点图

    1. 点图在简单水平刻度上绘制大量有标签值的方法;
    2. 函数:dotchart(x,labels=)
      1. x是一个数值向量;
      2. labels是由每个点的标签组成的向量;
      3. cex可控制标签的大小;
      4. 参数groups来选定一个因子,用以指定x中元素的分组方式;
      5. 当使用groups时,参数gcolor可以控制不同组标签的颜色
    3. 示例
    dotchart(mtcars$mpg,labels=row.names(mtcars),cex=.7,main="Gas Mileage for Car Models",xlab="Miles Per Gallon")
    
    # 分组、排序、着色后的点图
    # 根据每加仑汽油行驶英里数(从最低到最高)对数据框mtcars进行排序
    x <- mtcars[order(mtcars$mpg),]
    
    # 数值向量cyl被转换为一个因子
    x$cyl <- factor(x$cyl)
    x$color[x$cyl==4] <- "red"
    x$color[x$cyl==6] <- "blue"
    x$color[x$cyl==8] <- "darkgreen"
    dotchart(x$mpg,labels=row.names(x),cex=.7,groups=x$cyl,gcolor="black",color=x$color,pch=19,main="Gas Milesage for Car Models\ngrouped by cylinder",xlab="Miles Per Gallon")
    
    # 说明:随着汽缸数的减少,每加仑汽油行驶的英里数有了增加。但你同时也看到了例外。例如,Pontiac Firebird有8个汽缸,但较六缸的Mercury 280C和Valiant的行驶英里数更多。六缸的Hornet 4 Drive与四缸的Volvo 142E的每加仑汽油行驶英里数相同。
    # 同样明显的是,Toyota Corolla的油耗最低,而Lincoln Continental和Cadillac Fleetwood是英里数较低一端的离群点
    
    

你可能感兴趣的:(R action 6)