Lesson 7:绘制统计图

准备:绘图的开始与结束语句

dev.new() # 打开一个新窗口,这样就不会覆盖掉原来的图
png("regress.png") 
opar <- par(no.readonly=TRUE)# 以生成可供修改的图形参数列表
# 填写设置参数的代码,见1
# 填写绘图的代码,见2-6
dev.off() # 关闭这个窗口

一、设置参数

1、设置画布
设置图片长宽和页边距

par(pin=c(3,4), mai=c(.1,.5, .1, .2))
# pin长宽,mai页边距

多图排布

par(mfrow=c(2,2)) # 2*2的四个图排列

精准控制图片的行列排布

layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE), 
       widths=c(3, 1), heights=c(1, 2))

2、设置图片内的线条、点

par(lty=1, pch=1, lwd=1, cex=1, col="red",bg="white") 
# lty线形,pch点形,lwd线条宽度,cex点的大小, col线条颜色。
参数 含义
lty 线形
lwd 线条宽度
col 线条颜色
pch 点形
cex 点的大小
bg 背景色
fg 前景色

3、设置标题格式

title(main="", col.main="", sub=" ", col.sub="",xlab="", ylab="",col.lab="", 
      cex.lab=,side.main=1)
# side.main=文字位置,1下,2左,3上,4右

注意:cex此处表示缩放倍数

参数 含义
side 设置标题位置
axis 坐标轴 刻度
lab 坐标轴 标签
xlim, ylim 坐标轴范围
xlab,ylab x轴,y轴(用于设置标签文字)
main 主标题(用于设置标签文字)
sub 副标题(用于设置标签文字)

4、设置坐标轴格式

axis(side, at=seq(0,6,2), labels=seq(20,60,2), pos=, lty=1, col="black", las=0, tck=0.01,xaxt="n")
# side 在图形的哪边画坐标轴;at刻度线的位置;
# labels刻度对应的文字;pos与另一坐标轴相交的值;las平行或垂直于坐标轴
参数 含义
at 需要绘制刻度线的位置
labels 刻度对应的文字
cex.axis 坐标轴刻度的缩放倍数
las label平行(=0)或垂直(=2)于坐标轴
pos 与另一坐标轴相交的位置

5、添加辅助线

注意:abline必须在画完图之后运行。

abline(h=y值,v=x值) # 在画完图之后运行
lines(x, y, type="b", pch=22, col="blue", lty=2)

6、图例

legend("topleft",c("直线回归","二次多项式","三次多项式"),lty=c(1,2,3),col=c("black","red","blue"))

7、添加图形标签

text(2, 1.27, "text place", col="red")
# text(x,y,"标签")其中x, y是在坐标轴中的位置,然后是标签文字

8、细小刻度线

rug(side=2,jitter(df$age)) # side=1下,2左,3上,4右

例题

x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
# 设置图形长宽和页边距
par(pin=c(3,4), mai=c(1,.5, 1, .2))
plot(x, y, type="b",
     pch=21, col="red",
     yaxt="n", lty=3,ann=FALSE)
# 在图像中添加新图形
lines(x, z, type="b", pch=22, col="blue", lty=2)
# 设置坐标轴
axis(2, at=x, labels=x, col.axis="red", las=2)
axis(3, at=z, labels=round(z, digits=2),
     col.axis="blue", las=2, cex.axis=0.7, tck=-.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")

二、各类统计图

  • plot()
  • 箱线图
  • 条形图
  • 饼图
  • 直方图
  • 扇形图
  • 核密度图

1、plot()
p.s. 画两变量的散点图,也用plot(df$ a,df$ b)

plot(x,y,type="b") # b是同时绘制点和线,p是点,l为线,不写是条形统计图

2、箱线图 boxplot

箱线图五个分位点,25%、中位数、75%,两条须的延伸极限不会超过盒型各端加1.5倍四分位距的范围。

boxplot(df$mpg) # 只有一个箱子

使用箱线图跨组比较

boxplot(mpg ~ cyl, data=df) # ~左边是统计变量,右边是分组变量。

两个交叉因子的箱线图

df$cyl.f <- factor(df$cyl, levels=c(4,6,8),labels=
                       c("4","6","8")) #先定义分组因子
df$am.f <- factor(df$am, levels=c(0,1), labels=
                      c("auto", "standard"))
boxplot(mpg ~ am.f *cyl.f, data=df, varwidth=TRUE,
        col=c("gold","darkgreen"), main="MPG", xlab="Auto Type",
        ylab="Miles Per Gallon")

3、条形图(柱状图) barplot()

count <- table(df$AGE)
barplot(count)

联合柱状图

barplot(table(df$tint, df$sex))

4、饼图 pie( )

自定义饼图中的每个扇形的值

slices <- c(10, 12, 4, 16, 8) # 每个扇形的面积
lbls <- c("US", "UK", "Australia", "Germany", "France")
pie(slices, labels=lbls) 

用数据框内的数据画饼图

mytable <- table(df$RACE)
lbls3 <- paste(names(mytable), "\n", mytable, sep="")
pie(mytable, labels = lbls3)

3D饼图

library(plotrix)
pie3D(slices, labels=lbls,explode=0.1)

5、直方图 hist()

注:条形图和直方图的区别在于hist合并了小组。

H<- hist(df$AGE, breaks=12, col="red",freq=TRUE) # breaks组数

如果freq=TRUR则画出频数分布,如果freq=FALSE,则画出频率分布;后者加密度曲线时可以直接plot,不用添加副坐标轴。

显示分组详细情况

count1 <- table(cut(mtcars$mpg,breaks=12, right=FALSE))###分组问题!!
count2 <- prop.table(count1) # 分组比例

加入密度曲线

# 概率密度曲线
par(new = TRUE) # 在该页面上新添加图形
plot(density(d1), col="blue", lwd=2,xaxt = "n", yaxt = "n", ylab = "", xlab = "",main="") 
# 必须加xaxt = "n", yaxt = "n", ylab = "", xlab = "",main="",否则文字会重叠
axis(side=4)
# 添加正态分布的密度曲线
xfit1 <- seq(min(d1), max(d1), 24)
yfit1 <- dnorm(xfit1, mean=100, sd=100)
lines(xfit1,yfit1, col="black", lwd=2) 
box()#添加外框

另一种做法

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()

6、扇形图fan.plot()

library(plotrix)
slices <- c(10, 12, 4, 16, 8)
lbls <- c("US", "UK", "Australia", "Germany", "France")
fan.plot(slices, labels = lbls, main="Fan Plot")

7、核密度图

plot(density(x))

8、经验分布函数

# AGE的经验分布函数
plot(ecdf(df$AGE),verticals = TRUE,do.p = FALSE) # do.p = FALSE表示不画点处的记号
# 用正态分布的累积函数分布图来拟合经验分布
x <- 44:78
sd<-(var(df$AGE)*(length(df$AGE)-1)/length(df$AGE))^0.5
b <- pnorm(x,mean(df$AGE),sd)
lines(x,b,col="blue") 

补充例题

  1. 作出age和it的散点图, 用函数lowness()作出拟合线,在图的两边加上箱型图.
  2. 作出age和it关于因子变量tint的条件散点图;
# 3)
lines(lowess(tinting$age,tinting$it),lwd=2) # 拟合线
par(new=TRUE)
par(mar=c(-2,1,1,1))
boxplot(tinting$age,axes=F,horizontal = T)
par(new=TRUE)
par(mar=c(1,2,2,5))
boxplot(tinting$it,axes=F) ### 如何在图的两边加上boxplot???
#4)
coplot(tinting$it~tinting$age|tinting$tint) # 条件散点图
coplot(tinting$it~tinting$age|tinting$tint*tinting$sex) # 条件散点图

你可能感兴趣的:(零基础,r语言)