记录下条形图,直方图,箱线图以及其它部分常见统计图的函数与技巧~
1、条形图
barplot()函数:针对类别型变量,频率分类计数
tip:原始数据先table
,再绘图
library(vcd) #示例用vcd包的一项数据
Arthritis$Improved
#观察变量类型为类别型
table(Arthritis$Improved)
counts <- table(Arthritis$Improved)
# 针对分类变量统计计数
counts
class(counts)
#为专有的二联表格式
str(counts)
barplot(counts,
main="Simple Bar Plot", col = rainbow(3),
xlab="Improvement", ylab="Frequency",)
#添加horiz=TRUE 参数会生成水平条形图
- 堆砌条形图与分组条形图
#若对象是一个矩阵
counts <- table(Arthritis$Improved, Arthritis$Treatment)
#counts有两组(对照组,改善组),每组针对效果又分为三种类型
#堆砌条形图,besides=FALSE(默认值)
barplot(counts,
main="Stacked Bar Plot",
xlab="Treatment", ylab="Frequency",
col=c("red", "yellow","green"),
legend=rownames(counts))
#分组条形图,需要设置参数besides=TRUE。二者区别可见图
barplot(counts,
main="Grouped Bar Plot",
xlab="Treatment", ylab="Frequency",
col=c("red", "yellow", "green"),
legend=rownames(counts), beside=TRUE)
补充一个棘状图:
spine
是每个条形高度均为1,每一段的高度表示比例的堆砌条形图
attach(Arthritis)
counts <- table(Treatment,Improved)
spine(counts, main="Spinogram Example")
detach(Arthritis)
关于条形图并非一定是根据频率,也可以利用整合函数(aggregate)创建均值、中位数等条形图。
下面以绘制均值条形图为例,顺便复习下整合函数aggregate的用法
states <- data.frame(state.region, state.x77)
means <- aggregate(states$Illiteracy, by=list(state.region), FUN=mean)
#参数依次为-所想要返回的变量-整合依据-整合功能
means #查看下返回的结果
barplot(means$x, names.arg=means$Group.1,col = rainbow(4)) #name.arg选项为展示标签
title("Mean Illiteracy Rate") #添加个大标题
2、直方图:hist()
- 用于展示连续性变量频数分布图。x轴是将值域分割为一定数量的组,y轴为频数。
hist(x) #x是数值型向量
mtcars$mpg #查看下,确实为一连串数值
hist(mtcars$mpg)
#最简单的画法,参数均为默认
变化分组,上色等
hist(mtcars$mpg,
breaks=12,
col=rainbow(12),
xlab="Miles Per Gallon",
main="Colored histogram with 12 bins")
#上述参数依次为:指定分为12组;上色;添加标题。
- 修饰1:添加一条轴须图,是一种一维的表达方式。看x轴~
rug(jitter(mtcars$mpg, amount = 0.01))
- 修饰2:添加正态分布曲线
xfit <- seq(min(mtcars$mpg), max(mtcars$mpg), length = 40)
yfit <- dnorm(xfit, mean = mean(mtcars$mpg), sd = sd(mtcars$mpg))
yfit <- yfit*diff(h$mids[1:2])*length(x)
# 确定正态分布点
lines(xfit, yfit, col = "blue", lwd = 2)
3、箱线图
描述了连续型变量的分布
五个数:最小值、下四分位数(.25)、中位数(.5)、上四分位数(.75),最大值。
能够判断离群点(IQR±1.5*IQR以外的值,IQR=四分位距,即上四分位数与下四分位数的差值。若数据点未达到计算范围两端,则由这些数据点的高值和低值(不包括离群值)来确定须线。
#(1)直接绘图单箱线图
boxplot(mtcars$mpg, ylim=c(5,35))
#ylim参数指定y轴的起始位置
#(2)单因子并列箱线图
mtcars$cyl.f <- factor(mtcars$cyl,
levels=c(4,6,8),
labels=c("cyl4","cyl6","cyl8"))
boxplot(mpg~cyl.f,data=mtcars,
main="Car Milage Data",
xlab="Number of Cylinders",
ylab="Miles Per Gallon")
#针对cyl三种不同的类型,画三个箱线图
#(3)交叉双因子并列箱线图
mtcars$cyl.f <- factor(mtcars$cyl,
levels=c(4,6,8),
labels=c("4","6","8"))
mtcars$am.f <- factor(mtcars$am,
levels=c(0,1),
labels=c("auto","standard"))
#上述将两个数值型变量转换为因子型
boxplot(mpg ~ am.f *cyl.f,
data=mtcars,
varwidth=TRUE,
col=c("gold", "darkgreen"),
main="MPG Distribution by Auto Type",
xlab="Auto Type")
#varwidth=TRUE 表示箱图的宽度可适当变化。
补充:画含有凹槽的箱线图,boxplot() 函数添加notch=TRUE参数,若两个箱的凹槽不重叠,则表明其中位数有显著差异。
4、点图
-
dotchart(x,label=)
函数
dotchart(mtcars$mpg,labels=row.names(mtcars),
cex=.7,
main="Gas Mileage for Car Models",
xlab="Miles Per Gallon")
#上面是个简单的点图;下面来绘制个经排序、分组,着色后精美的点图
x <- mtcars[order(mtcars$mpg),]
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,
pch=19,
groups = x$cyl,
gcolor = "black",
color = x$color,
main = "Gas Mileage for Car Models\ngrouped by cylinder",
xlab = "Miles Per Gallon")
5、其它图形
核密度图
- 估计连续型变量概率分布的非参数方法
如前,正态分布概率密度曲线是有参数的(均值mean,方差sd);而核密度图仅根据数据特征估计概率密度的方法。
plot(density(x))
d=density(mtcars$mpg)
plot(d)
polygon(d,col="red",border="blue") #在下方添加实心颜色
- 绘制多条核密度曲线,比较组间差别
library(sm) #需要加载一个包
cyl.f <- factor(mtcars$cyl, levels = c(4,6,8),
labels = c("4 cylinder", "6 cylinder",
"8 cylinder"))
sm.density.compare(mtcars$mpg, mtcars$cyl, xlab = "Miles Per Gallon")
colfill <- c(2:(1 + length(levels(cyl.f)))) #注意颜色对应的数字
legend(locator(1), levels(cyl.f), fill = colfill)
#交互式确定图例位置
小提琴图
- 就是核密度图以镜像的方式在箱线图上的叠加,白点为中位数。
- 值得注意的是按因子绘制多类小提琴图时,
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"))
还有饼图的做法,觉得用到的机会不多,就不介绍了,详见p116
代码大部分参考教材《R语言实战(第2版)》
--寒假自学R语言的生信小白。
武汉加油!