20171225(从有道迁移)
基本图形
-
条形图
-
简单条形图:
- 通过垂直的或水平的条形展示了类别型变量的分布(频数)
- 语法:
barplot(height)
, 其中的height是一个向量或一个矩阵 - 选项horiz=TRUE会生成一幅水平条形图
- 选项main可添加一个图形标题,选项xlab和ylab则会分别添加x轴和y轴标签
library("vcd") counts <- table(Arthritis$Improved) barplot(counts,main="Simple Bar Plot",xlab="Imporvement",ylab="Frequency")
-
堆砌条形图和分组条形图
- 如果height是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。
- 若beside=FALSE(默认值),则矩阵中的每一列都将生成图中的一个条形,各列中的值将给出堆砌的“子条”的高度。
- 若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"))
-
均值条形图
- 条形图并不一定要基于计数数据或频率数据。
- 可以使用数据整合函数并将结果传递给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)
-
条形图的微调
- cex.names调整字号
- names.arg你指定一个字符向量作为条形的标签名
- par()函数也可以对图形进行微调
- 详细参数可以查看barplot的帮助文档
-
为棘状图(spinogram)
- 棘状图对堆砌条形图进行了重缩放,这样每个条形的高度均为1,每一段的高度即表示比例。
- 棘状图可由vcd包中的函数spine()绘制。
-
-
饼图
- 饼图函数:pie(x,labels),其中x是一个非负数值向量,表示每个扇形的面积,而labels则是表示各扇形标签的字符型向量。
- 示例:
--图形设置,这样四幅图形就会被组合为一幅 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)
-
扇形图:是通过plotrix包中的fan.plot()函数实现的
fan.plot(slices,labels=lbls,main="Simple Fan Chart")
-
直方图
- 在X 轴上将值域分割为一定数量的组,在Y轴上显示相应值的频数,展示了连续型变量的分布;
- 函数:hist(x)
- x是一个由数据值组成的数值向量
- 参数freq=FALSE表示根据概率密度而不是频数绘制图形
- 参数breaks用于控制组的数量
- 在定义直方图中的单元时,默认将生成等距切分。
- 示例
# 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()
-
核密度图
- ==核密度估计==是用于估计随机变量概率密度函数的一种非参数方法;
- 函数
plot(density(x))
- x是一个数值型向量。
- plot()函数会创建一幅新的图形,向一幅已经存在的图形上叠加一条密度曲线,可以使用lines()函数
- 示例
# 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")
- 核密度图可用于比较组间差异,用sm包中的sm.density.compare()函数可向图形叠加两组或更多的核密度图。使用格式为
sm.density.compare(x,factor)
- x是一个数值型向量
- factor是一个分组变量
- 示例:
#比较拥有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)
-
箱线图
- 通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布
- 箱线图能够显示出可能为离群点(范围±1.5*IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测
- 函数:
boxplot(x)
; 示例:boxplot(mtcars$mpg,main="Box Plot",ylab="Miles Per Gallon")
- 执行boxplot.stats(mtcars$mpg)即可输出用于构建图形的统计量
- 使用并列箱线图进行跨组比较,格式:```boxplot(formula,data=dataframe)
- formula是一个公式。示例公式:
- 公式y ~A,将为类别型变量A的每个值并列地生成数值型变量y的箱线图。
- 公式y ~ A*B,将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图
- dataframe代表提供数据的数据框(或列表)。
- 参数varwidth=TRUE将使箱线图的宽度与其样本大小的平方根成正比。
- 参数horizontal=TRUE可以反转坐标轴的方向
- 通过添加notch=TRUE,可以得到含凹槽的箱线图
- 示例:
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")
- formula是一个公式。示例公式:
-
小提琴图
- 小提琴图(violin plot)是箱线图变种;
- 小提琴图是箱线图与核密度图的结合;
- 使用vioplot包中的vioplot()函数绘制;
- 格式:vioplot(x1,x2,...,names=,cols=)
- x1,x2,…表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图);
- 参数names是小提琴图中标签的字符向量;
- col是一个为每幅小提琴图指定颜色的向量。
- 示例
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")
-
点图
- 点图在简单水平刻度上绘制大量有标签值的方法;
- 函数:dotchart(x,labels=)
- x是一个数值向量;
- labels是由每个点的标签组成的向量;
- cex可控制标签的大小;
- 参数groups来选定一个因子,用以指定x中元素的分组方式;
- 当使用groups时,参数gcolor可以控制不同组标签的颜色
- 示例
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是英里数较低一端的离群点