目录
plot函数
par函数
hist函数
boxplot函数
plot函数应用实战
全局参数
R语言中有三大绘图系统包括基本绘图系统,Lattice绘图系统,ggplot2绘图系统
基本绘图系统
在R语言中,以下函数通常用于创建和定制图形:
- plot
函数:用于生成基本的二维散点图或线图。它可以用于展示两个变量之间的关系,或者多个数据集在同一图形上的比较。
- hist
函数:用于生成直方图,这是一种展示数据分布的图形。直方图可以快速揭示数据的分布情况,包括集中趋势、离散程度和异常值。
- boxplot
函数:用于生成箱线图,这是一种用于展示数据分布和比较不同数据集的图形。箱线图可以显示数据的中位数、四分位数和异常值。
- points
函数:用于在已有的图形上添加点。这可以用来突出显示特定的数据点或在图形上标记特定的值。
- lines
函数:用于在图形上添加直线。这通常用于连接散点图中的点,创建趋势线,或在其他类型的图形中添加额外的线元素。
- text
函数:用于在图形上添加文本。这可以用来标记特定的点、添加注释或显示额外的信息,如标题或标签。
- title
函数:用于给图形添加标题。这有助于解释图形的内容,使观看者能够理解图形所表示的数据和信息。
- axis
函数:用于添加或定制坐标轴。这可以包括设置轴标签、轴范围、刻度和刻度标签等。
plot函数
plot函数中有很多参数,但是只有两个参数也就是x和y是必须的,其余比较重要的函数有xlab,ylab,他们用来给x轴和y轴添加标签,lwd用来指定线宽,lty用来指定划线的类型(比如是实线还是虚线),pch用于指定点的形状,比如画点是用的实心还是空心还是三角形等等。pch的取值有很多,每一个值都对应一种不同的点的类型。col就是color的缩写,用来指定颜色。
par函数
这个函数用于设置全局参数,这个设置会作用于R中所有的plot绘图。
这个函数有很多的参数,比如
- bg 参数:用于设置图形背景颜色。您可以传递一个颜色名称或颜色代码,如 "white"、"black"、"blue" 或十六进制颜色代码,来改变整个图形区域的背景颜色。
- mar 参数:用于设置图形边缘的大小。这是一个数值向量,通常包含四个元素,分别代表图形设备左、下、右、上边缘的行数。增加 mar 的值可以增加图形周围的空白区域,减少则可以使图形更紧凑。
- las参数:用于控制坐标轴标签的方向。值可以是0、1、2或3,分别代表不同的标签方向:
-
- 0:标签总是平行于轴线(默认)。
- 1:标签总是水平的。
- 2:标签总是垂直于轴线。
- 3:标签总是垂直的,但与0相反的方向。
- mfrow 参数:用于设置图形输出的行数和列数。这是一个可选参数,当您希望在一个图形窗口中绘制多个图形时非常有用。例如,mfrow=c(2,2) 会将图形输出分为两行两列,总共四个绘图区域。
- mfcol 参数:与 mfrow 类似,但它用于设置图形输出的列数和行数。例如,mfcol=c(2,2) 会创建一个两列两行的图形布局。
使用 par 函数时,可以单独设置这些参数,也可以将它们组合在一个包含所有设置的列表中传递给 par 函数。例如:
par(bg="lightblue", mar=c(5, 4, 4, 2), las=1)
这将设置背景颜色为浅蓝色,左边缘为5行高,下边缘和右边缘为4行高,上边缘为2行高,并将坐标轴标签设置为水平方向。
下面来举几个例子:
还是以airquality这个数据集为例
hist函数
使用hist函数生成一个直方图,直方图是柱状图的一种,用于展示数据集中某个变量在不同区间内取值的频数
这个直方图展示的是Wind这一列的内容,横轴是一个个等长的区间,纵轴是频数,可以直观地观察到各个区间内wind变量取值的频数
由于我们没有在创建直方图的时候指定xlab参数,因此hist函数就把参数当成了横轴标签
boxplot函数
我们再使用boxplot(airquality$Wind)这句代码绘制一个箱线图,箱线图可以让我们直观地观察到数据集中的Wind变量取值的分布情况,可以看到在我们没有指定xlab,ylab等参数的时候x轴什么也没有,我们知道x轴的标签表示的应该是Wind,y轴的数值表示的是风速,因此我们可以引入参数xlab和ylab
把代码改成这样的boxplot(airquality$Wind,xlab="Wind",ylab="speed"),此时绘制的箱线图是这样的
前面我们讲过箱线图不仅能够表示一个变量取值的分布情况,还可以利用并排箱图直观地反应一个分类变量和一个数值变量的关系。如果我们要看不同月份的时候风速的分布情况,代码可以这样写boxplot(Wind~Month,airquality,xlab="Month",ylab="speed"),运行结果如图
来解释一下这个代码,这个~在R语言中的功能通常是分割响应变量和解释变量,响应变量也就是我们俗称的因变量,解释变量也就是我们所说的自变量。这句代码中Wind~Month指明了响应变量是Wind,解释变量是Month,然后第二个参数告诉boxplot函数要操作的数据集是airquality,通过下面的图可以看出风速在七月份比较低,五月份比较高。
下面我对R语言中一些~的常用功能汇总
在R语言中,符号 ~ 通常用作公式(formula)的分隔符,它用来分隔响应变量和解释变量。这个符号在数据框(data frames)、统计模型和图形函数中都非常常见。如果是在绘图函数中的参数中遇到~,那么他一定是用于指定y轴和x轴代表的含义。以下是 ~ 符号的一些主要用途:
- 数据框和数据库查询
-
- 在数据框中,~ 可以用来引用数据框中的列。例如,dataframe~column1 表示数据框 dataframe 中名为 column1 的列。
- 在数据库查询中,~ 用于模糊匹配列名。例如,SELECT ~column FROM table 会匹配 table 中所有以 column 开头的列。
- 统计模型
-
- 在建立统计模型时,~ 用于指定模型的左侧为响应变量(因变量),右侧为解释变量(自变量)。例如,在线性模型 lm(y ~ x, data) 中,y 是响应变量,x 是解释变量,而 data 是包含这些变量的数据框。
- 图形函数
-
- 在图形函数中,如 plot()、boxplot() 等,~ 用于指定x轴和y轴的关系。例如,plot(x ~ y, data) 会根据 data 数据框中的 x 和 y 列绘制散点图。
- 逻辑运算
-
- 在逻辑运算中,~ 用作逻辑非运算符。例如,!condition 和 condition ~ FALSE 在逻辑上是等价的,都表示条件 condition 为假的情况。
- 宏替换
-
- 在编写宏或使用模式匹配时,~ 可以用来转义特殊字符,使其不被当作模式匹配的一部分。
plot函数应用实战
plot函数用于绘制散点图,他的两个必要参数第一个是x,第二个是y,也就是横纵坐标。
比如我们想看看airquality这个数据集中Wind与Temp的关系,可以这样写代码plot(airquality$Wind,airquality$Temp),运行结果如图,从图中来看风速和温度似乎存在着一种负相关的关系。
当然在绘制这个图的时候为了让plot函数明确的知道Wind和Temp这两个来自于airquality这个数据集,我们在他们两个的前面都加上了airquality$,这种写法虽然能够很好的完成任务,但是好像让代码看起来有些冗余,我们还可以以一种更简洁的方式来写这个代码,比如with(airquality,plot(Wind,Temp)),with函数的第一个参数指定你想要在其上执行操作的数据源,后面的参数就是对这个数据源中的一些变量进行的操作,这里我们是对airquality这个数据源中的Wind变量和Temp变量进行绘制散点图的操作,以这种方式绘制的散点图与上面的图基本类似,但是在横轴和纵轴标签上有些许差异,就是少了airquality$
如果想要给这个图添加上一个标题,可以在plot函数中引入参数main,比如with(airquality,plot(Wind,Temp,main="wind and temp"))
还可以使用title函数给当前画图板上的图加上一个标题,比如title("wind and temp"),title参数不止可以添加主标题,也可以添加xlab和ylab,他的函数原型如下title(main = "title", xlab = "x-axis label", ylab = "y-axis label", ...)
如果我们在plot函数中再引入一个参数type="n",运行结果就是这样的一个图
在R语言中,plot 函数的 type 参数用于指定绘制图形的类型。当使用 type="n" 时,这个参数告诉R创建一个没有数据点的图形框架,也就是说,它仅绘制坐标轴和标题,但不显示任何数据点或线条。
这种用法通常是一个准备工作,让你能够手动添加数据点或其他图形元素。例如,你可能首先用 type="n" 创建一个图形框架,然后使用 points 函数添加散点图数据,或者使用 lines 函数添加线图数据。这样做可以让你更细致地控制图形的外观和布局。
在代码 with(airquality, plot(Wind, Temp, main="wind and temp", type="n")) 中,type="n" 创建了一个空的图形框架,其中 Wind 和 Temp 是 airquality 数据框中的两列,main="wind and temp" 设置了图形的标题。由于使用了 type="n",所以不会有数据点被自动添加到图形中,你需要后续使用 points 或其他函数来显示数据。
比如我们只想要画九月份的风速,可以这样写with(subset(airquality,Month==9),points(Wind,Temp,col="red")),结果如图
同理我们还可以使用下面的代码来绘制这样的图,把五月份的wind与temp的散点图用蓝色表示,6,7,8月份的wind与temp的散点图用黑色来表示
注意到在绘制六七八月份的散点图的时候我们并没有使用三句代码,这是因为不同于前面两句的Month用==指定月份,6,7,8月份的散点图在绘制的时候指定Month使用了一个特殊的符号%in%,在R语言中,%in% 是一个逻辑操作符,用于检查左边的表达式是否存在于右边的集合中。当左边的表达式是右边集合的成员时,返回 TRUE,否则返回 FALSE。这个操作符通常用于向量化的逻辑测试,可以快速地对向量或列表中的元素进行成员资格检查。因此Month%in%c(6,7,8)就会在Month的取值为6,7,8这三个数的时候返回TRUE,此时plot函数就可以绘制他们的wind与temp的散点图了。
自此我们完成了不同月份wind与temp的散点图使用不同颜色绘制的任务,如果我们想要在图中加一条回归线用它来拟合现在的数据。要做到这一点需要两步,首先要拟合一个模型,这里拟合模型使用的函数叫lm,用于创建线性拟合线性模型,代码这样写fit
但是此时这幅图还有一个问题,就是虽然我们针对不同月份使用了不同颜色的散点,但是对于读者来讲,他们并不知道这些颜色分别代表哪些月份,因此我们还应该在这幅图中加上一些注释标签(图例),legend("topright",pch=1,col=c("red","blue","black"),legend=c("Sep","May","other"))这句代码表示在右上方加上图例,我来详细解释一下这句代码:
legend 函数用于在图形上创建一个图例,以帮助解释图中的符号、颜色或其他图形元素的含义。下面是对这段代码的详细解释:
- "topright":这个参数指定了图例的位置。在这个例子中,图例将被放置在图形的右上角。
- pch=1:pch 参数代表图形符号的类型。值 1 表示使用圆圈作为点的形状。
- col=c("red","blue","black"):col 参数定义了不同图形符号的颜色。在这个例子中,有三个颜色被定义:红色、蓝色和黑色。这些颜色将与 legend 参数中定义的标签相关联。
- legend=c("Sep","May","other"):这个参数定义了图例中每个颜色或符号所代表的标签。在这个例子中,有三个标签:"Sep"(代表9月),"May"(代表5月),和 "other"(代表其他月份或类别)。
因此legend("topright", pch=1, col=c("red","blue","black"), legend=c("Sep","May","other")) 这段代码将在图形的右上角添加一个图例,其中包含三种不同颜色的圆圈,分别对应于 "Sep"、"May" 和 "other" 这三个类别。这有助于图形的观看者理解图中不同颜色的点代表的具体含义。
全局参数
使用函数par可以设置全局参数,比如:
par("bg"),设置背景板颜色,默认是白色
par("col"),设置绘图的点或线的颜色,默认是黑色
par("mar"),设置图像距离四个边界的距离,顺序是下左上右,可以看到默认是这样的
par("mfrow"),设置一个画板中能画几幅图,且按照行的方式进行填充
全局参数 mfrow 是用于控制图形布局的参数之一。当你在创建多个图形并且希望它们在同一个图形窗口中按照行和列的方式排列时,mfrow 参数非常有用。
mfrow 是一个包含两个元素的向量,第一个元素指定行数,第二个元素指定列数。当你设置了 mfrow 参数后,接下来的图形将会按照这个布局进行排列。例如,如果你设置 mfrow=c(2,2),那么接下来的图形将会被排列成2行2列的格式。
这个参数是 par() 函数的一部分,par() 函数用于设置或查询图形参数的多个全局设置。例如:
par(mfrow=c(2,2))
plot(1:10, rnorm(10))
plot(1:20, rnorm(20))
在这个例子中,两个图形将会被放置在同一个窗口中,按照2行2列的布局排列。第一个图形占据第一行的两个位置,第二个图形占据第二行的两个位置。如图
请注意,mfrow 的设置会影响所有接下来的图形,直到它被改变或者图形设备被关闭。如果你想恢复到默认的图形布局,可以将 mfrow 设置为 c(1,1),或者创建一个新的图形设备来开始一个新的布局。
与mfrow非常相似的一个全局参数是mfcol,他的功能与mfrow非常相似,也是用来设置一个画图板可以画几幅图,唯一的区别是mfcol设置的排版是按照列的方式来填充的。