R的基础绘图系统由Ross Ihaka编写,功能非常强大,主要由graphics包和grDevices包组成,它们在启动R时会自动加载。基础绘图系统中有两类函数,一类是高水平作图函数,另一类是低水平作图函数。所谓高水平作图函数是用于直接产生图形的函数,包括plot( )、hist( )、boxplot( )和pairs( )等。低水平作图函数是用于在高水平作图函数所绘图形的基础上添加新的图形或元素的函数,包括points( )、lines( )、text( )、title( )、legend( )和axis( )等。
4.1.1 函数plot( )
函数plot( )是一个泛型函数,对于不同类型的数据,它可以绘制出不同的图形。例如,对于数值型数据,它可以绘制出散点图;对于分类数据,它可以绘制出箱线图;对于一些统计模型,它可以绘制出相应的图形,比如对于生存分析,它可以绘制出生存曲线。因此,函数plot( )的使用频率非常高,建议读者打开它的帮助文档查看其各种常用参数的用法。
下面创建一个示例数据,表示某病病人对2种药物(drugA和drugB)、5个剂量(dose)水平上的响应情况。
> dose <- c(20, 30, 40, 45, 60)> drugA <- c(16, 20, 27, 40, 60)> drugB <- c(15, 18, 25, 31, 40)
用上面的数据绘制药物A的剂量和响应关系的图形:
> plot(dose, drugA)> plot(dose, drugA, type = "b")
上面的命令创建了两幅图,函数plot( )里的参数type默认为“p”(代表点),所以得到的图4-1(a)是散点图。在第二行命令里,参数type改为了“b”(代表点和线),所以得到的图4-1(b)是点线图。
(a) (b)
图4-1 药物A剂量与响应关系散点图(a)和点线图(b)
函数plot( )用于新建一幅图形,我们还可以用低水平作图函数,例如lines( )、legend( )等,在一幅现有图形上添加新的图形元素。例如:
> plot(dose, drugA, type = "b", + xlab = "Dosage",ylab = "Response",+ lty = 1,pch = 15)> lines(dose, drugB, type = "b", lty = 2, pch = 17)> legend("topleft", title = "Drug Type",+ legend = c("A", "B"), + lty = c(1, 2), + pch = c(15, 17))
如图4-2所示,为了比较两种药物不同剂量下的响应情况,我们在一幅图上展示两个点线图,并用不同类型的线(lty)和不同特征的点(pch)加以区分。为了增强可读性,还添加了图例(legend)。需要注意的是,函数legend( )里面点和线的属性必须与前面函数plot( )和lines( )中设置的属性一致。
图4-2 药物A与药物B剂量与响应关系的比较