r语言 图形一览_R语言第六章——基本图形(多图)

本文介绍了R语言中的基本图形,包括条形图(简单和堆砌)、饼图、直方图、核密度图、箱线图以及点图的绘制方法。通过实例展示了如何使用barplot()、pie()、hist()、plot()等函数,以及如何调整图形的外观和添加细节。内容涵盖了不同类型的图表在数据分析和可视化中的应用,帮助读者理解和掌握R语言的图形绘制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章内容

条形图、箱线图和点图

饼图和扇形图

直方图与核密度图

6.1条形图(Simple Bar Plot简单条形图)(Horizontal Bar Plot水平条形图)

条形图通过垂直的或水平的条形展示了类别型变量的分布(频数)。

使用barplot()函数:barplot(height)。其中的height是一个向量或一个矩阵。

01简单条形图(height 是一个向量时)

示例如下:

>install.packages("vcd")#安装vcd包

> library(vcd)#载入包

> counts

> counts#输出结果

None Some Marked

42 14 28

>

> barplot(counts,

+ main = "Simple Bar Plot",

+ xlab = "Improvement",ylab = "Frequency")#绘制简单条形图

简单条形图

> barplot(counts,

+ main = "Horizontal Bar Plot",

+ xlab = "Frequency",ylab = "Improvement", col = c("red","yellow","green"),

+ horiz = TRUE)#绘制水平条形图,horiz = TRUE表示水平绘制,使用col添加颜色

水平条形图添加颜色后

02堆砌条形图和分组条形图(height 是一个矩阵时)

> library(vcd)

> counts

> counts#输出结果

Placebo Treated

None 29 13

Some 7 7

Marked 7 21

>

> barplot(counts,

+ main = "Stacked Bar Plot",

+ xlab = "Treatment",ylab = "Frequency",

+ col = c("red","yellow","green"),

+ legend=rownames(counts))#绘制堆砌条形图

堆砌条形图

> barplot(counts,

+ main = "Grouped Bar Plot",

+ xlab = "Treatment",ylab = "Frequency",

+ col = c("red","yellow","green"),

+ legend=rownames(counts),beside = TRUE)#绘制分组条形图

分组条形图

参数legend.text为图例提供了各条形的标签(仅在height为一个矩阵时有用)。

beside=FALSE(默认值),若beside=TRUE,则矩阵中的每一列都表示一个分组,各列中的值将并列而不是堆砌。

由于标签和图形重叠,影响美观和观测,所以回看第三章相关内容,改进如下:

legend("topright",legend=c("None","Some","Marked"),fill=c("red","yellow","green"))

但是效果还不是很理想。

03均值条形图

条形图并不一定要基于计数数据或频率数据。你可以使用数据整合函数并将结果传递给barplot() 函数,来创建表示均值、中位数、标准差等的条形图。

> options(digits = 3)

> states

> means

> means

Group.1 x

1 Northeast 1.00

2 South 1.74

3 North Central 0.70

4 West 1.02

>

> means

> means

Group.1 x

3 North Central 0.70

1 Northeast 1.00

4 West 1.02

2 South 1.74

>

> barplot(means$x,names.arg = means$Group.1)

> title("Mean Illiteracy Rate")#添加标题

>#缺失一个标签,不知道为何?

美国各地区平均文盲率排序的条形图

lines(means$x,type = "b",pch=17,lty=2,col="red")#加入代码添加线条

均值条形图加入线条

04条形图的微调

有若干种方式可以微调条形图的外观。使用参数cex.names来减小字号。将其指定为小于1的值可以缩小标签的大小。可选的参数names.arg允许你指定一个字符向量作为条形的标签名。你同样可以使用图形参数辅助调整文本间隔。

> par(mar=c(5,8,4,2))#增加y边界的大小

> par(las=2)#旋转条形的标签

> counts

> barplot(counts,main = "Treatment Outcome",

+ horiz = TRUE,

+ cex.names = 0.8,#缩小字体,让标签更合适

+ names.arg = c("No Improvement","Some Improvement",

+ "Markde Improvement"))#修改标签文本

微调了标签的垂直条形图

05 棘状图

> library(vcd)

> attach(Arthritis)

The following object is masked _by_ .GlobalEnv:

ID

> counts

> spine(counts, main="Spinogram Example")

> detach(Arthritis)

>

关节炎治疗结果的棘状图

6.2饼图

饼图可由以下函数创建:pie(x,labels)

其中x是一个非负数值向量,表示每个扇形的面积,而labels则是表示各扇形标签的字符型向量。

> par(mfrow=c(2,2))#四个图形为作为一组

> slices

> lbls

> #输出饼图

> pie(slices,labels = lbls,main = "Simple Pie Chart")

>

>

> pct

> lbls2

> #有5种颜色的饼图

> pie(slices,labels = lbls2,col = rainbow(length(lbls2)),

+ main = "Pie Chart with Percentages")

> #生成3D饼图

> library(plotrix)

> pie3D(slices,labels=lbls,explode=0.1,

+ main="3D Pie Chat ")

> #从表格创建饼图

> mytable

> lbls3

> pie(mytable,labels = lbls3,

+ main = "Pie Chart from a Table\n (with sample sizes)")

>

饼图示例

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

> library(plotrix)

> slices

> lbls

> fan.plot(slices,labels = lbls,main = "Fan Plot")

国别数据扇形图

6.3直方图

使用如下函数创建直方图:hist(x),其中的x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。在定义直方图中的单元时,默认将生成等距切分。

> par(mfrow=c(2,2))#定义图形位置

> hist(mtcars$mpg)#绘制简单直方图,未指定任何参数,默认图形

> #绘制信息清晰的直方图,添加标签、标题、颜色

> hist(mtcars$mpg,

+ breaks = 12,#指定为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

> h

+ breaks = 12,

+ col = "red",

+ xlab = "Miles Per Gallon",

+ main = "Histogram with normal curve and box")

> xfit

> yfit

> yfit

> lines(xfit,yfit,col="blue",lwd=2)

> box()

直方图复杂

6.4核密度图

绘制密度图的方法(不叠加到另一幅图上方)为:plot(density(x))

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

> #绘制核密度图

> par(mfrow=c(2,1))

> d

> plot(d)#绘制默认设置的最简图形

>

> d

> plot(d,main = "Kernel Density of Miles Per Gallon")#添加一个标题

> polygon(d,col = "red",border = "blue")#将曲线修改为蓝色,并使用实心红色填充曲线下方的区域

> rug(mtcars$mpg,col = "brown")#添加棕色的轴须图

核密度图.

> library(sm)

> attach(mtcars)

> #创建分组因子。

> cyl.f

+ labels = c("4 cylinder","6 cylinder",

+ "8 cylinder"))#变量 cyl 是一个以4、6或8编码的数值型变量。

> #为了向图形提供值的标签,这里 cyl 转换为名为 cyl.f 的因子。

>

> sm.density.compare(mpg,cyl,xlab="Miles Per Gallon")#绘制密度图

> title(main = "MPG Distribution by Car Cylinders")#添加标题

>

> colfill

> legend(locator(1),levels(cyl.f),fill=colfill)

按汽缸个数划分的各车型每加仑汽油行驶英里数的核密度图.

6.5箱线图

箱线图(又称盒须图)通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。箱线图能够显示出可能为离群点(范围±1.5*IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测。

> #生成箱线图

> boxplot(mtcars$mpg,main="Box plot",ylab="Miles per Gallon")

> boxplot.stats(mtcars$mpg)

$stats

[1] 10.40 15.35 19.20 22.80 33.90

$n

[1] 32

$conf

[1] 17.11916 21.28084

$out

numeric(0)

生成简单箱线图,手动添加

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

箱线图可以展示单个变量或分组变量。使用格式为:oxplot(formula,data=dataframe)

其中的formula是一个公式,dataframe代表提供数据的数据框(或列表)。

一个示例公式为yA,这将为类别型变量A的每个值并列地生成数值型变量y的箱线图。公式yA*B则将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图。添加参数varwidth=TRUE将使箱线图的宽度与其样本大小的平方根成正比。参数horizontal=TRUE可以反转坐标轴的方向。

#为每个气缸生成每加仑行驶的英里数箱线图

> boxplot(mpg~cyl,data = mtcars,

+ main="Car Mileage Data",

+ xlab="Number of Cylinders",

+ ylab="Miles per Gallom")

不同汽缸数量车型油耗的箱线图.

> #添加notch=TRUE生成含凹槽的箱线图

> boxplot(mpg~cyl,data = mtcars,

+ notch=TRUE,

+ varwidth=TRUE,

+ col="red",

+ main="Car Mileage Data",

+ xlab="Number of Cylinders",

+ ylab="Miles Per Gallon")

Warning message:

In bxp(list(stats = c(21.4, 22.8, 26, 30.4, 33.9, 17.8, 18.65, 19.7, :

一些槽在折叶点外('box'): 可能是因为notch=FALSE

不同汽缸数量车型油耗的含凹槽箱线图

#两个交叉因子的箱线图

> #创建气缸数量因子

> mtcars$cyl.f

+ levels = c(4,6,8),

+ labels = c("4","6","8"))

> #创建变速箱类型因子

> mtcars$am.f

+ levels = c(0,1),

+ labels = c("auto","standard"))

> #绘制箱线图,为变速箱和气缸数所有水平的两两组合生成每加仑行驶英里数

> boxplot(mpg~am.f*cyl.f,

+ data = mtcars,

+ col=c("gold","darkgreen"),

+ main="MPG Distribution by Atuo Type",

+ xlab="Atuo Type",

+ ylab="Miles Per Gallon")

不同变速箱类型和汽缸数量车型的箱线图

从图中可以看到不同组间油耗的区别非常明显。同时也可以发现,六缸车型的每加仑汽油行驶的英里数分布较其他两类车型更为均匀。与六缸和八缸车型相比,四缸车型的每加仑汽油行驶的英里数散布最广(且正偏)。在八缸组还有一个离群点。

02小提琴图

使用vioplot包中的vioplot()函数绘制它。请在第一次使用之前安装vioplot包。

vioplot()函数的使用格式为:vioplot(x1,x2,...,names=,col=)

其中x1,x2,...表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图)。参数names是小提琴图中标签的字符向量,而col是一个为每幅小提琴图指定颜色的向量。

> install.packages("vioplot")

> library(vioplot)

Warning message:

程辑包‘vioplot’是用R版本3.3.3 来建造的

> x1

> x2

> x3

> vioplot(x1,x2,x3,

+ names = c("4 cyl","6 cyl","8 cyl"),

+ col = "gold")

>

> title("Violin Plots of Miles Per Gallon",

+ ylab = "Miles Per Gallon",

+ xlab = "Number of Cylinders")

汽缸数量和每加仑汽油行驶英里数的小提琴图

(小提琴图真的很漂亮)

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

6.6点图

点图提供了一种在简单水平刻度上绘制大量有标签值的方法。

你可以使用dotchart()函数创建点图,格式为: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")

每种车型每加仑汽油行驶英里数的点图

> #各车型依汽缸数量分组的每加仑汽油行驶英里数点图,分组排序后的点图

> #根据每加仑汽油行驶英里数(从最低到最高)

> #对数据框 mtcars 进行排序,结果保存为数据框 x

> x

> #将数值向量 cyl 转换为一个因子

> x$cyl

> #添加一个字符型向量 ( color )到数

> #据框 x 中,根据 cyl 的值,它所含的值

> #为 "red" 、 "blue" 或 "darkgreen"

> x$color[x$cyl==4]

> x$color[x$cyl==6]

> x$color[x$cyl==8]

> dotchart(x$mpg,

+ labels=row.names(x),#各数据点的标签取自数据框的行名

+ cex=.7,

+ groups=x$cyl,#数据点根据汽缸数量分组

+ gcolor="black",#数字4、6、8显示为黑色

+ color=x$color,#点和标签的颜色

+ pch=19,

+ main="Gas Mileage for Car Models\ngrouped by cylinder",

+ xlab="Mlies Per Gallon")

各车型依汽缸数量分组的每加仑汽油行驶英里数点图

从图中可以看到,随着汽缸数的减少,每加仑汽油行驶的英里数有了增加。但也有例外。例如,Pontiac Firebird有8个汽缸,但较六缸的Mercury280C和Valiant的行驶英里数更多。六缸的Hornet 4 Drive与四缸的Volvo 142E的每加仑汽油行驶英里数相同。同样明显的是,Toyota Corolla的油耗最低,而Lincoln Continental和Cadillac Fleetwood是英里数较低一端的离群点。

本章小结

学会了使用条形图和饼图了解类别型变量的分布,以及通过堆砌条形图和分组条形图理解不同类别型输出的组间差异。

探索了直方图、核密度图、箱线图、轴须图以及点图可视化连续型变量分布的方式。

了解了密度图、并列箱线图和分组点图可视化连续型输出变量组间差异的方法。

对单个变量(数值型变量和类别型变量)的可视化方法有了一定的认识和掌握,通过各种常用图形的绘制,加深了理解单个变量的分布和意义,有利于后续多变量统计方法的学习。

重点是熟悉并掌握各类图形的应用场景、使用函数,以及相关的绘图函数应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值