R 语言绘制数据:图表篇

R 语言有非常多的绘图和数据可视化的包,比如 graphicslatticeggplot2等。这是 R 语言系列的第 9 篇文章,我们会介绍 R 中用来绘图的各种函数。

$ R --versionR version 4.1.2 (2021-11-01) -- "Bird Hippie"Copyright (C) 2021 The R Foundation for Statistical ComputingPlatform: x86_64-pc-linux-gnu (64-bit)

R 是自由软件,没有任何担保责任。只要遵守 GNU 通用公共许可证的版本 2 或者版本 3,你就可以对它进行(修改和)再分发。详情见
https://www.gnu.org/licenses/。

折线图

我们以印度全境消费者物价指数(CPI — 乡村/城市)数据集为研究对象,它可以从
https://data.gov.in/catalog/all-india-consumer-price-index-ruralurban-0下载。选择“截止到 2021 年 11 月” 的版本,用
read.csv函数读取下载好的文件,如下所示:

> cpi  head(cpi)Sector Year Name Andhra.Pradesh Arunachal.Pradesh Assam Bihar1 Rural 2011 January 104 NA 104 NA2 Urban 2011 January 103 NA 103 NA3 Rural+Urban 2011 January 103 NA 104 NA4 Rural 2011 February 107 NA 105 NA5 Urban 2011 February 106 NA 106 NA6 Rural+Urban 2011 February 105 NA 105 NAChattisgarh Delhi Goa Gujarat Haryana Himachal.Pradesh Jharkhand Karnataka1 105 NA 103 104 104 104 105 1042 104 NA 103 104 104 103 104 1043 104 NA 103 104 104 103 105 1044 107 NA 105 106 106 105 107 1065 106 NA 105 107 107 105 107 1086 105 NA 104 105 106 104 106 106...

以 Punjab 州为例,对每年各月份的 CPI 值求和,然后用 plot函数画一张折线图:

> punjab  head(punjab)Group.1 x1 2011 3881.762 2012 4183.303 2013 4368.404 2014 4455.505 2015 4584.306 2016 4715.80> plot(punjab$Group.1, punjab$x, type="l", main="Punjab Consumer Price Index upto November 2021", xlab="Year", ylab="Consumer Price Index")

plot函数可以传入如下参数:

参数 描述
x 向量类型,用于绘制 x 轴的数据
y 向量或列表类型,用于绘制 y 轴的数据
type 设置绘图类型:p画点;l画线;o同时画点和线,且相互重叠;s画阶梯线;h画铅垂线
xlim x 轴范围
ylim y 轴范围
main 标题
sub 副标题
xlab x 轴标题
ylab y 轴标题
axes 逻辑型,是否绘制坐标轴

结果如图 1。

自相关图

自相关图能在时序分析中展示一个变量是否具有自相关性,可以用 R 中的 acf函数绘制。acf函数可以设置三种自相关类型:correlationcovariancepartial。图 2 是 Punjab 州 CPI 值的自相关图,x 表示 CPI。

acf(punjab$x,main='x')

acf函数可以传入以下参数:

参数 描述
x 一个单变量或多变量的时序对象,或者一个数值向量或数值矩阵
lag.max 最大滞后阶数
type 字符型,设置所计算的自相关类型:correlationcovariancepartial
plot 逻辑性,若 TRUE则绘制图像,若FALSE则打印传入数据的描述信息
i 一组要保留的时差滞后
j 一组要保留的名称或数字

柱状图

R 中画柱状图的函数是 barplot。下面的代码用来画 Punjab 州 CPI 的柱状图,如图3:

> barplot(punjab$x, main="Punjab Consumer Price Index", sub="Upto November 2021", xlab="Year", ylab="Consumer Price Index", col="navy")

barplot函数的使用方法非常灵活,可以传入以下参数:

参数 描述
height 数值向量或数值矩阵,包含用于绘图的数据
width 数值向量,用于设置柱宽
space 柱间距
beside 逻辑型,若 FALSE则绘制堆积柱状图,若TRUE则绘制并列柱状图
density 数值型,设置阴影线的填充密度(条数/英寸),默认为 NULL,即不填充阴影线
angle 数值型,填充线条的角度,默认为 45
border 柱形边缘的颜色
main 标题
sub 副标题
xlab x 轴标题
ylab y 轴标题
xlim x 轴范围
ylim y 轴范围
axes 逻辑型,是否绘制坐标轴

help命令可以查看barplot函数的详细信息:

> help(barplot)barplot                package:graphics                R DocumentationBar PlotsDescription:     Creates a bar plot with vertical or horizontal bars.Usage:     barplot(height, ...)     ## Default S3 method:     barplot(height, width = 1, space = NULL,             names.arg = NULL, legend.text = NULL, beside = FALSE,             horiz = FALSE, density = NULL, angle = 45,             col = NULL, border = par("fg"),             main = NULL, sub = NULL, xlab = NULL, ylab = NULL,             xlim = NULL, ylim = NULL, xpd = TRUE, log = "",             axes = TRUE, axisnames = TRUE,             cex.axis = par("cex.axis"), cex.names = par("cex.axis"),             inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0,             add = FALSE, ann = !add && par("ann"), args.legend = NULL, ...)     ## S3 method for class 'formula'     barplot(formula, data, subset, na.action,             horiz = FALSE, xlab = NULL, ylab = NULL, ...)

饼图

绘制饼图时要多加注意,因为饼图不一定能展示出各扇形间的区别。(LCTT 译注:根据统计学家和一些心理学家的调查结果,这种以比例展示数据的统计图形 实际上是很糟糕的可视化方式,因此,R 关于饼图的帮助文件中清楚地说明了并不推荐使用饼图,而是使用条形图或点图作为替代。) 用subset函数获得 Gujarat 州在 2021 年 1 月 Rural、Urban、Rurual+Urban 的 CPI 值:

> jan2021  jan2021$Gujarat[1] 153.9 151.2 149.1> names 

使用 pie函数为 Gujarat 州的 CPI 值生成饼图,如下所示:

> pie(jan2021$Gujarat, names, main="Gujarat CPI Rural and Urban Pie Chart")

pie函数可以传入以下参数:

参数 描述
`x 元素大于 0 的数值向量
label 字符向量,用于设置每个扇形的标签
radius 饼图的半径
clockwise 逻辑型,若 TRUE则顺时针绘图,若FALSE则逆时针绘图
density 数值型,设置阴影线的填充密度(条数/英寸),默认为 NULL,即不填充阴影线
angle 数值型,填充线条的角度,默认为 45
col 数值向量,用于设置颜色
lty 每个扇形的线条类型
main 标题

箱线图

(LCTT 译注:箱线图主要是 从四分位数的角度出发描述数据的分布,它通过最大值(Q4)、上四分位数(Q3)、中位数(Q2)、下四分位数(Q1) 和最小值(Q0)五处位置来获取一维数据的分布概况。我们知道,这五处位置之间依次包含了四段数据,每段中数据量均为总数据量的 1/4。通过每一段数据占据的长度,我们可以大致推断出数据的集中或离散趋势。长度越短,说明数据在该区间上越密集,反之则稀疏。)

箱线图能够用“须线whisker” 展示一个变量的四分位距Interquartile Range(简称 IQR=Q3-Q1)。用上下四分位数分别加/减内四分位距,再乘以一个人为设定的倍数 range(见下面的参数列表),得到range * c(Q1-IQR, Q3+IQR),超过这个范围的数据点就被视作离群点,在图中直接以点的形式表示出来。

boxplot函数可以传入以下参数:

参数 描述
data 数据框或列表,用于参数类型为公式的情况
x 数值向量或者列表,若为列表则对列表中每一个子对象依次作出箱线图
width 设置箱子的宽度
outline 逻辑型,设置是否绘制离群点
names 设置每个箱子的标签
border 设置每个箱子的边缘的颜色
range 延伸倍数,设置箱线图末端(须)延伸到什么位置
plot 逻辑型,设置是否生成图像,若 TRUE 则生成图像,若 FALSE 则打印传入数据的描述信息
horizontal 逻辑型,设置箱线图是否水平放置

boxplot函数绘制部分州的箱线图:

> names  boxplot(cpi$Andaman.and.Nicobar, cpi$Lakshadweep, cpi$Delhi, cpi$Goa, cpi$Gujarat, cpi$Bihar, names=names)

QQ 图

QQ 图Quantile-Quantile plot可以用来对比两个数据集,也可以用来检查数据是否服从某种理论分布。qqnorm函数能绘制正态分布 QQ 图,可以检验数据是否服从正态分布,用下面的代码绘制 Punjab 州 CPI 数据的 QQ 图:

> qqnorm(punjab$x)

qqline函数可以向正态分布 QQ 图上添加理论分布曲线,它可以传入以下参数:

参数 描述
x 第一个数据样本
y 第二个数据样本
datax 逻辑型,设置是否以 x 轴表示理论曲线的值,默认为 FALSE
probs 长度为 2 的数值向量,代表概率
xlab x 轴标题
ylab y 轴标题
qtype [1,9]内的整数,设置分位计算类型,详情见help(quantile)的类型小节

等高图

等高图可以描述三维数据,在 R 中对应的函数是 contour,这个函数也可以用来向已有的图表添加等高线。等高图常与其他图表一起使用。我们用contour对 R 中的volcano数据集(奥克兰的火山地形信息)绘制等高图,代码如下:

> contour(volcano)

contour函数的常用参数如下:

参数 描述
x,y z 中数值对应的点在平面上的位置
z 数值向量
nlevels 设置等高线的条数,调整等高线的疏密
labels 等高线上的标记字符串,默认是高度的数值
xlim 设置 x 轴的范围
ylim 设置 y 轴的范围
zlim 设置 z 轴的范围
axes 设置是否绘制坐标轴
col 设置等高线的颜色
lty 设置线条的类型
lwd 设置线条的粗细
vfont 设置标签字体

等高线之间的区域可以用颜色填充,每种颜色表示一个高度范围,如下所示:

> filled.contour(volcano, asp = 1)# asp 为图形纵横比,即 y 轴上的 1 单位长度和 x 轴上 1 单位长度的比率

填充结果见图 8。

掌握上述内容后,你可以尝试 R 语言 graphics包中的其他函数和图表(LCTT 译注:用help(package=graphics)可以查看 graphics 包提供的函数列表)。

via: https://www.opensourceforu.com/2022/05/plotting-data-in-r-graphs/

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月11日
下一篇 2022年6月11日

相关推荐