在R中理解plot()函数 – 图形绘制的基础
在这个教程中,让我们首先通过使用R中的plot()函数来了解基础知识。R语言以其美观的图形和丰富的函数集而闻名,可以构建和格式化任何类型的图表,而plot()函数系列就是帮助我们构建这些图表的一部分。
在R中,plot()函数并不是一个单一定义的函数,而是一组相关函数的占位符。调用的确切函数将取决于使用的参数。最简单的情况下,plot()函数只是将两个向量相互绘制出来。
plot(c(1,2,3,4,5),c(1,4,9,16,25))
这个提供了一个简单的画出 y = x^2 的图。
使用R中的plot()函数来改变图形外观。
正如我们将看到的,R中的plot()函数可以通过多种方式进行自定义,从而创建更复杂和引人注目的图形。
-
- 标记的形状:默认情况下,标记是小的空心圆。这些也被称为绘图字符-pch代表。您可以通过在plot函数中添加一个新的pch值来更改它们。 Pch的值从0到25都是有效的,并在图上给出几个不同的符号。 Pch 0代表正方形,1代表圆形,3代表三角形,4代表交叉等等。
-
- 标记的大小:图形的这个方面可以使用cex参数进行控制。如果您希望标记变小50%,可以将cex参数设置为0.5;如果您希望它们变大50%,可以将其设置为1.5。
-
- 标记的颜色:可以为标记分配一个或多个颜色。这些颜色可以从R提供的colors()函数下的列表中选择。
-
- 使用线连接数据点:很多时候,连接显示的数据点需要不同类型的线。这可以通过plot函数的类型属性来实现。类型属性设置为’p’表示只有点,’l’表示只有线。同样,值’b’和’o’分别用于连接点和覆盖点的线。为了获得类似直方图的显示,使用’h’选项,而使用’s’选项则用于阶梯显示。
- 改变线的样式:可以使用lty参数指定线型(范围为0到6),使用lwd参数设置线宽。
让我们现在尝试用我们目前所学的知识构建一些图表。
我们将从生成一个正弦波绘图开始。令x为一个从-pi到pi的值序列向量,间隔为0.1,而y则包含了x对应的正弦值。现在尝试将x作为自变量,y作为因变量进行绘图。
x=seq(-pi,pi,0.1)
y=sin(x)
plot(x,y)
让我们现在尝试改变符号和颜色。
plot(x,y,pch=c(4,5,6),col=c('red','blue','violet','green'))
我们现在让编译器从3种不同的符号和4种不同的颜色中选择来标记图表。让我们看看它的效果如何。
R还允许使用par()函数将多个图形合并成一张图像,以方便我们查看。在绘制图形前,我们只需要设置好空间即可调用plot函数。
#Set a plotting window with one row and two columns.
par(mfrow=c(1,2))
plot(x,y,type='l')
plot(x,y,pch=c(4,5,6),col=c('red','blue','violet','green'))
以下展示了使用以上各种选项的几个附加图表。
#Set space for 2 rows and 3 columns.
par(mfrow=c(2,3))
#Plot out the graphs using various options.
plot(x,cos(x),col=c('blue','orange'),type='o',pch=19,lwd=2,cex=1.5)
plot(x,x*2,col='red',type='l')
plot(x,x^2/3+4.2, col='violet',type='o',lwd=2,lty=1)
plot(c(1,3,5,7,9,11),c(2,7,5,10,8,10),type='o',lty=3,col='pink',lwd=4)
plot(x<-seq(1,10,0.5),50*x/(x+2),col=c('green','dark green'),type='h')
plot(x,log(x),col='orange',type='s')
生成的图表如下所示。
在R中使用plot()函数向图表中添加更多信息。
图表在有解释它们的注释和信息时显得更完整。这些包括图表和坐标轴的标题,图例。有时甚至需要给数据点加标签。让我们看一下如何在R中添加这些到图表中。
-
- 使用绘图函数的主选项来添加主标题。可以使用font.main、col.main和cex.main来自定义字体、颜色和大小。
-
- 使用xlab和ylab属性提供坐标轴的标题。这些可以使用font.lab、col.lab和cex.lab进行自定义,就像上面的标题一样。
-
- 还可以使用文本属性在图表中添加一些额外的文本,并指定要使用的文本和要显示的坐标。
-
- 文本属性还可用于标记数据点。在这种情况下,文本是标签的向量,而不是字符串。
- 可以使用R的legend()函数将图例添加到图表中。图例以坐标、文字和要解释的符号作为输入。
让我们来看一下例子来说明这些。
#Displaying the title with color
plot(c(1,3,5,7,9,11),c(2,7,5,10,8,10),type='o',lty=3, col='pink',lwd=4,main="This is a graph",col.main='blue')
#Same graph with xlabel and ylabel added.
> plot(c(1,3,5,7,9,11),c(2,7,5,10,8,10),type='o',lt=3,col='pink',lwd=4,main="This is a graph",col.main='blue',xlab="Time",ylab="Performance")
让我们使用文本属性为图表中的每个数据点添加一个标签。
labelset <-c('one','three','five','seven','nine','eleven')
x1<- c(1,3,5,7,9,11)
y1 <- c(2,7,5,10,8,10)
plot(x1,y1,type='o',lty=3,col='pink',lwd=4,main="This is a graph",col.main='blue',xlab="Time",ylab="Performance")
text(x1+0.5,y1,labelset,col='red')
最后,让我们使用legend()函数为上述图表添加一个图例。
> legend('topleft',inset=0.05,"Performace",lty=3,col='pink',lwd=4)
可以通过x和y坐标或使用”topleft”或”bottomright”之类的位置指定图例的位置。Inset是指将图例框稍微移动到图表的内部。最终的图表现在有一个图例。
叠加图表
R也允许将两个图形叠加在一起而不是为每个图形创建一个新窗口。这可以通过调用lines()函数来实现第二个图形,而不是再次使用plot()函数。当进行度量比较或不同数值集之间的比较时,这种功能非常有用。让我们看一个例子。
x=seq(2,10,0.1)
y1=x^2
y2=x^3
plot(x,y1,type='l',col='red')
lines(x,y2,col='green')
legend('bottomright',inset=0.05,c("Squares","Cubes"),lty=1,col=c("red","green"),title="Graph type")
给绘图添加线条
可以使用简单的abline()函数将直线添加到现有的绘图中。abline()函数接受4个参数,a、b、h和v。变量a和b代表斜率和截距。h表示水平线的y坐标,v表示垂直线的x坐标。
让我们来看一个例子以澄清这个问题。在构建了上述平方和立方图之后,尝试执行这三个语句。
abline(a=4,b=5,col='blue')
abline(h=c(4,6,8),col="dark green",lty=2)
abline(v=c(4,6,8),col="dark green",lty=2)
第一条蓝线是根据指定的斜率和截距建立的。接下来的三组水平和垂直线以虚线样式绘制,x和y的值由lty=2指定。
这涵盖了R中绘图函数的基本知识。当与其他包(如ggplot2)结合使用时,R可以构建出最具展示性和动态性的图形,随后的教程中我们会看到。