欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言实战学习笔记-第六章基本图形

程序员文章站 2022-07-14 20:53:21
...
本章内容
条形图、箱线图和点图
饼图和扇形图

直方图与核密度图

6.1 条形图

barplot(height)  其中的height是一个向量或一个矩阵。

6.1.1简单的条形图

library(vcd)
counts<-table(Arthritis$Improved)
barplot(counts,main = 'Simple Bar Plot',xlab = 'Improvement',ylab = 'Frequency')
barplot(counts,main = 'Horizontal  Bar Plot',ylab = 'Improvement',xlab = 'Frequency',horiz = TRUE)#水平

若要绘制的类别型变量是一个因子或有序型因子,就可以使用函数plot()快速创建一幅垂直条形图。

plot(Arthritis$Improved, main="Simple Bar Plot",xlab="Improved", ylab="Frequency")
plot(Arthritis$Improved, horiz=TRUE, main="Horizontal Bar Plot",xlab="Frequency", ylab="Improved")

6.1.2堆砌条形图和分组条形图

如果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,beside=TRUE,main="Grouped Bar Plot",xlab="Treatment", ylab="Frequency",
        col = c('red','yellow','green'),legend=rownames(counts))

R语言实战学习笔记-第六章基本图形R语言实战学习笔记-第六章基本图形

6.1.3均值条形图

states <- data.frame(state.region,state.x77)
#aggregate将数据进行分组(按行),然后对每一组数据进行函数统计,最后把结果组合成一个表格返回
means <- aggregate(states$Illiteracy, by=list(state.region), FUN=mean)
means <- means[order(means$x),]
barplot(means$x,names.arg = means$Group.1)
title('Mean Illiteracy Rate')

6.1.4条形图的微调

使用参数cex.names来减小字号。将其指定为小于1的值可以缩小标签的大小。可选的参数names.arg允许你指定一个字符向量作为条形的标签名。

6.1.5棘状图

函数spine()

library(vcd)
attach(Arthritis)
counts <- table(Treatment, Improved)
spine(counts, main="Spinogram Example")
detach(Arthritis)

6.2 饼图

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=lbls2, col=rainbow(length(lbls2)),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 Table\n (with sample sizes)')

扇形图

扇形图是通过plotrix包中的fan.plot()函数实现

6.3 直方图

hist(x)

其中的x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。

参数breaks用于控制组的数量

par(mfrow=c(2,2))
hist(mtcars$mpg)

hist(mtcars$mpg,breaks = 12,col='red',xlab = "Miles Per Gallon",main="Colored histogram with 12 bins")

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)

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

R语言实战学习笔记-第六章基本图形

6.4 核密度图

plot(density(x)) 其中的x是一个数值型向量。由于plot()函数会创建一幅新的图形,所以要向一幅已经存在的图形上叠加一条密度曲线,可以使用lines()函数

par(mfrow=c(2,1))
d<-density(mtcars$mpg)
plot(d)

d<-density(mtcars$mpg)
plot(d,main = "Kernel Density of Miles Per Gallon")
#将曲线修改为蓝色,并使用实心红色填充曲线下方的区域
polygon(d,col = 'red',border = 'blue')
#添加棕色的轴须图
rug(mtcars$mpg,col = 'brown')

R语言实战学习笔记-第六章基本图形

使用sm包中的sm.density.compare()函数可向图形叠加两组或更多的核密度图。使用格式为:

sm.density.compare(x, factor)

library(sm)
attach(mtcars)
cyl.f <- factor(cyl, levels= c(4,6,8),
                labels = c("4 cylinder", "6 cylinder",
                           "8 cylinder"))
sm.density.compare(mpg, cyl, xlab="Miles Per Gallon")
title(main="MPG Distribution by Car Cylinders")
colfill<-c(2:(1+length(levels(cyl.f))))
#通过鼠标单击添加图例
legend(locator(1), levels(cyl.f), fill=colfill)
detach(mtcars)

先创建的是一个颜色向量,这里的colfill值为c(2, 3, 4)。然后通过legend()函数向图形上添加一个图例。第一个参数值locator(1)表示用鼠标点击想让图例出现的位置来交互式地放置这个图例。第二个参数值则是由标签组成的字符向量。第三个参数值使用向量colfill为cyl.f的每一个水平指定了一种颜色。

6.5 箱线图

R语言实战学习笔记-第六章基本图形

boxplot.stats(mtcars$mpg) 输出用于构建图形的统计量

6.5.1使用并列箱线图进行跨组比较

boxplot(formula, data=dataframe)

其中formula是一个公式,dataframe代表提供数据的数据库(或列表)。一个示例公式为y ~ A,这将为类别型变量A的每个值并列地生成数值型变量y的箱线图。公式y ~ A*B则将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图。

箱线图灵活多变,通过添加notch=TRUE。可以得到含凹槽的箱线图。若两个箱的凹槽互不重叠,则表明他们的中位数有显著差异。

boxplot(mpg ~ cyl, data=mtcars,
        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")

#两个交叉因子的箱线图
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", ylab="Miles Per Gallon")
R语言实战学习笔记-第六章基本图形
6.5.2 小提琴图
vioplot(x1, x2, ... , names=, col=)
其中x1, x2, ...表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图)。参数names是小提琴图中标签的字符向量,而col是一个为每幅小提琴图指定颜色的向量。

白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。

6.6 点图

dotchart(x, labels=)

其中的x是一个数值向量,而labels则是由每个点的标签组成的向量。你可以通过添加参数groups来选定一个因子,用以指定x中元素的分组方式。如果这样做,则参数gcolor可以控制不同组标签的颜色,cex可以控制标签的大小。

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,
         groups = x$cyl,
         gcolor = "black",
         color = x$color,
         pch=19,
         main = "Gas Mileage for Car Models\ngrouped by cylinder",
         xlab = "Miles Per Gallon")
R语言实战学习笔记-第六章基本图形