掌握R语言基础绘图:全面学习R作图技巧
大家好,今天来为大家解答掌握R语言基础绘图:全面学习R作图技巧这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
4.1.1 函数plot( )
函数plot()是一个通用函数,可以针对不同类型的数据绘制不同的图形。例如,对于数值数据,可以绘制散点图;对于分类数据,可以绘制箱线图;对于一些统计模型,它可以绘制相应的图形,例如对于生存分析,它可以绘制生存曲线。因此,plot()函数的使用非常频繁。建议读者打开其帮助文档查看其各种常用参数的使用方法。
下面是一个样本数据,用于表示患有某种疾病的患者对2 种药物(药物A 和药物B)和5 个剂量水平的反应。
剂量- 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()中的参数类型默认为“p”(代表点),因此得到的图4 -1(a)是散点图。在第二行命令中,参数类型更改为“b”(代表点和线),因此得到的图4-1(b)是点线图。
(a) (b) 图4-1 药物A的剂量反应关系散点图(a)和点线图(b)
函数plot() 用于创建一个新图表。我们还可以使用低级绘图函数,例如lines()、legend()等,向现有图形添加新的图形元素。例如:
绘图(剂量,药物A,类型='b',+ xlab='剂量',ylab='响应',+ lty=1,pch=15)线(剂量,药物B,类型='b',lty=2, pch=17)legend('topleft', title='药物类型',+ legend=c('A', 'B'), + lty=c(1, 2), + pch=c(15, 17)) 如图4-2所示,为了比较两种药物在不同剂量下的反应,我们在一张图上显示两个点线图,并使用不同类型的线(lty)和具有不同特征的点(pch)被区分。为了增强可读性,还添加了图例。需要注意的是,函数legend()中点和线的属性必须与前面函数plot()和lines()中设置的属性一致。
图4-2 药物A和药物B的剂量和反应关系比较
4.1.2 直方图和密度曲线图
直方图是显示连续变量分布的最常用工具。它本质上是密度函数的估计。直方图和密度图通常用于探索分布,很少用于报告结果。函数hist() 可用于绘制直方图。
厌食症数据集位于MASS 包中,来自一项关于年轻女性厌食症患者体重变化的研究。该数据集包含72 个观察对象和3 个变量。变量Treat(处理方法)是一个包含3个水平的因子。变量Prewt 和Postwt 都是数值,代表治疗前后的体重(单位:磅)。以下是变量Prewt 的直方图。代码如下:
数据(厌食症,包='MASS')str(厌食症)'data.frame': 72 obs。 3 个变量: $ Treat : 因子w/3 个水平'CBT','Cont','FT': 2 2 2 2 2 2 2 2 2 2 . $ Prewt : num 80.7 89.4 91.8 74 78.1 88.3 87.3 75.1 80.6 78.4 . $ Postwt: num 80.2 80.1 86.4 86.3 76.1 78.1 75.1 86.7 73.5 84.6 .attach(anorexia)hist(Prewt) 图4-3(a) 显示了变量Prewt 的频率分布。由于函数hist()中没有设置参数,因此图中使用默认的组距离和轴标签。需要注意的是,直方图的形状受组间隔的影响。有时我们需要尝试不同的参数break值以获得合适的图表。函数hist()的输出结果包含一些计算返回值,可以用于进一步绘图或分析,例如区间的划分端点、频率(或密度)、区间中点等。
密度曲线提供了对数据分布的更平滑的描述。绘制密度曲线的方法是:
从图4-3(b) 可以看出,变量Prewt 的分布是单峰的,并且基本对称。我们还可以向直方图添加密度曲线、轴和须线。这时需要将函数hist()中的参数freq设置为FALSE,即用频率代替纵坐标,否则密度曲线几乎看不到。参数las设置为1以水平显示垂直轴的刻度标签。
hist(Prewt, freq=FALSE, col='红色',+ xlab='体重(磅)', + main='治疗前体重分布直方图',+ las=1)lines(密度(Prewt), col='blue', lwd=2) rug (Prewt) detach (anorexia) 图4-3 (c) 用红色填充条形,添加更多信息性的轴标签和标题,以及设置垂直轴刻度标签,通过设置参数las为1改为水平显示。然后使用函数lines()在直方图上叠加一条默认线宽两倍的蓝色密度曲线。最后,使用函数rug()在横轴上添加轴须图,以显示数据分布的密集趋势。
(a) (b) (c) 图4-3 直方图示例
4.1.3 条形图
条形图经常用于医学科学论文中。它们通过垂直或水平矩形显示分类变量的频率分布。函数barplot() 可用于绘制条形图。下面以vcd包中的Arthritis数据集为例,介绍函数barplot()的用法。该数据集来自一项类风湿关节炎新疗法的分组对照、双盲临床试验研究。响应变量Improved记录了每个接受药物治疗(Treated,41例)或安慰剂(Placebo,43例)的患者的治疗效果,分为3个级别(None、Some、Marked)。
library(vcd)data(Arthritis)attach(Arthritis)counts- table(Improved)countsImproved None Some Marked 42 14 28 函数table() 用于生成分类变量的频率统计表。从上面的输出中,我们可以看到28名患者有明显改善,14名患者部分改善,42名患者没有改善。可以使用条形图来显示该频率分布,如图4-4(a) 所示。
barplot(counts, xlab='Improvement', ylab='Freqency', las=1) 函数barplot() 还可用于显示二维列联表中的数据。图4-4(b)绘制了分组条形图并添加了颜色和图例。代码如下:
计数-表(改进,治疗)条形图(计数,+ col=c('红色','黄色','绿色'),+ xlab='改进',ylab='频率',+旁边=TRUE,las=1) legend('top', legend=rownames(counts), + fill=c('red', 'yellow', 'green')) (a) (b) 图4-4 条形图示例
条形图有时可用于显示不同类别下的均值、中位数、标准差、置信区间等。该功能可以使用基础包中的函数来实现,但需要的步骤较多。 epiDisplay包中的函数aggregate.plot()可以简化这个过程。下面的代码以厌食症数据集为例,绘制不同治疗方法下治疗后平均体重的条形图。结果如图4-5所示。
库(epiDisplay)aggregate.plot(anorexia$Postwt, by=list(anorexia$Treat), + error='sd', legend=FALSE, + bar.col=c('红色', '黄色', '绿色' ),+ ylim=c(0,100), las=1,+ main='') 图4-5 平均标准差条形图示例
上面的误差条代表标准偏差。我们可以通过更改函数aggregate.plot()中的误差参数设置来显示标准误差或置信区间。
4.1.4 饼图
饼图可用于显示分类数据的比例。例如,通过以下代码绘制的饼图(图4-6)显示了一周内医院急诊入院的疾病类型分布情况。
%- c(5.8, 27.0, 0.5, 20.8, 12.8, 33.1)disease- c('尚飞', '中风', '外伤', '晕倒', '食物中毒', '其他')lbs-paste0( 疾病,%,'%')pie(percent,labels=lbs,col=rainbow(6)) 图4-6某医院一周内急诊患者入院诊断分布
大多数统计学家不建议使用饼图,更喜欢使用条形图或点图而不是饼图,因为人们判断长度比面积更准确。因此,基础包的函数pie()用于绘制饼图的选项有限。然而,一些捐赠的软件包扩展了R 绘制饼图的功能,例如plotrix 软件包。该包提供的函数pie3D()可以绘制三维饼图,另一个函数fan.plot()可以绘制扇形图,功能与饼图类似。有兴趣的读者可以安装这个包并查看其帮助文档。
4.1.5 箱线图和小提琴图
箱线图,又称箱须图,常用于显示数据的一般分布特征,也用于探索异常值和异常值。函数boxplot() 可用于绘制箱线图。下面用箱线图展示了厌食数据集前后体重变化的分布情况。
anorexia$wt.change- anorexia$Postwt - anorexia$Prewtboxplot(anorexia$wt.change, ylab='体重变化(lbs)', las=1) 为了让读者更好地理解箱线图各部分的含义,作者在图4-7中添加了手动注释。如果数据是对称分布的,中位数(Median)应该位于上四分位数(Upper quartile)和下四分位数(Lower quartile)的中间,即箱线图的方框关于中位线对称。上铰链和下铰链之外的值通常被认为是异常值。
图4-7:添加标签的箱线图示例
平行箱线图可用于比较分类变量的每个类别下指标的分布。例如,要比较不同处理下的体重变化,可以使用以下命令:
boxplot(wt.change ~ Treat, data=anorexia,+ ylab='体重变化(lbs)', las=1) 函数boxplot() 的第一个参数是一个公式。 R中的公式一般使用符号“~”来连接变量。 “~”左边可以视为因变量,“~”右边可以视为自变量。从图4-8(a)可以看出,“FT”(家庭治疗)组的体重变化高于其他两组。然而,差异的显着性需要进一步的显着性检验来确定,我们将在第5 章中详细讨论。
小提琴图可以被视为箱线图和密度图的组合。 vioplot 包中的函数vioplot() 可用于绘制小提琴图。使用前请先安装并加载该包。例如,图4-8(a)可以显示为小提琴图,如图4-8(b)所示。
library(vioplot)vioplot(wt.change ~ Treat, data=anorexia, + ylab='体重变化(lbs)',+ col='gold', las=1) (a) (b) 图4-8 不同处理该模式下权重变化的箱线图(a)和小提琴图(b)
4.1.6 克利夫兰点图
克利夫兰点图本质上是散点图。它通过点的位置显示数据的大小。它是一种在简单的水平尺度上绘制大量标记值的方法。其功能与条形图相同。数字相似,但强调数据的顺序以及数据之间的差距。函数dotchart() 可用于绘制克利夫兰点图。数据集包中的数据集VADeaths是1940年美国弗吉尼亚州城乡不同年龄段人群的死亡率(以表示)。克利夫兰点图(图4-9)可以更好地展示这一数据。代码如下:
dotchart(VADeaths)dotchart(t(VADeaths), pch=19) 从图4-9可以看出,死亡率随着年龄的增长而增加;同一年龄组中,农村地区死亡率高于城市地区;在同一年龄段、同一地区,男性死亡率高于女性。
图4-9:克利夫兰点图示例
4.1.7 导出图形
《医学统计学概论》,华中科技大学同济医学院于松林教授作序。本书强调实用性和应用性,突出问题的本质和整体结构,并包含大量的R程序示例和图形,让你对数据分析有更深入的理解。本书以医疗数据为例,讲解了如何使用R进行数据分析,并结合大量精选实例和对常用分析方法的深入介绍,帮助读者解决医疗数据分析中的实际问题。
本书共分为14章。第1章至第3章介绍R语言的基本用法;第4章介绍数据可视化;第5章介绍基本的统计分析方法;第6章至第8章介绍医学研究中最常用的三种回归模型;第9章介绍生存分析的基本方法;第10章至第12章介绍了几种常用的多元统计分析方法;第13章介绍了临床诊断检验的统计评价指标和计算方法;第14章介绍医学研究实践中常用的荟萃分析方法。
本书适用于临床医学、公共卫生等医学相关专业本科生和研究生。也可作为其他专业学生和研究人员学习数据分析的参考书。阅读本书后,读者不仅可以掌握如何使用R及相关包快速解决实际问题,还可以对数据分析有更深入的了解。
本文由发布,不代表新途教育考试网立场,转载联系作者并注明出处:https://www.contdesign.com/k12/17557.html
用户评论
这篇文章真是太棒了!R的基础绘图系统一直让我感到困惑,但你的解释让我豁然开朗。尤其是你提到的ggplot2的对比,让我更清楚了基础绘图的优势。感谢分享!
有14位网友表示赞同!
我觉得这篇博文有些地方讲得不够清楚,特别是关于坐标轴的调整部分。虽然基础绘图系统很重要,但我更喜欢使用ggplot2,因为它更直观。希望下次能看到更多关于ggplot2的内容。
有14位网友表示赞同!
作为一个R的初学者,我真的很感激你写的这篇文章。基础绘图系统虽然简单,但却很实用。特别是你提供的示例代码,让我在实践中学到了很多东西。期待你更多的教程!
有8位网友表示赞同!
我认为这篇文章的结构有点混乱,阅读起来不太流畅。虽然基础绘图系统确实有其独特之处,但我觉得你可以更系统地组织内容,让读者更容易理解。
有15位网友表示赞同!
这篇文章让我意识到,基础绘图系统其实并没有我想象中的那么复杂。你的详细步骤和示例让我觉得很容易上手。以后我会尝试更多的绘图技巧,感谢你的指导!
有6位网友表示赞同!
我对这篇文章的内容有些失望。虽然基础绘图系统是R中的重要部分,但你没有深入探讨一些常见问题,比如如何处理缺失值。希望下次能更全面一些。
有5位网友表示赞同!
非常喜欢你对R基础绘图系统的讲解!特别是那些实用的小技巧,真的让我在作图时省了不少时间。期待你分享更多关于数据可视化的内容!
有17位网友表示赞同!
这篇文章有点太基础了,我觉得可以加入一些更高级的内容,比如如何自定义图形的样式。虽然基础绘图系统是入门,但我希望能看到更深入的分析。
有20位网友表示赞同!
感谢你分享的这篇博文!我一直在苦恼如何用R作图,看到你的文章后,终于找到了一些思路。基础绘图系统虽然简单,但用得好效果也不错!
有9位网友表示赞同!
这篇文章让我对基础绘图系统有了新的认识,尤其是你提到的调色板部分。我以前从来没有考虑过这一点,真是受益匪浅!希望能看到更多类似的内容。
有15位网友表示赞同!
我觉得这篇文章的例子不够丰富,很多基础绘图的可能性没有被展示出来。虽然我理解你想要强调基础,但我希望能看到更多不同类型的图形。
有7位网友表示赞同!
这篇文章写得很好,清晰易懂。基础绘图系统确实是R的一个重要组成部分,掌握它能为后续的学习打下良好的基础。期待你下一篇的分享!
有14位网友表示赞同!
我对基础绘图系统的理解一直不够深刻,但你的文章让我意识到其实很简单。感谢你提供的代码示例,真是太实用了!希望能看到更多这样的教程。
有16位网友表示赞同!
这篇博文让我有点失望,内容似乎不够深入。虽然基础绘图系统是个好话题,但我希望能看到更多关于如何处理复杂数据的示例。期待你能做得更好!
有7位网友表示赞同!
我觉得这篇文章的内容非常实用,特别是你提到的绘图参数调整部分。基础绘图系统虽然简单,但用得好可以做出很不错的效果!感谢你的分享!
有13位网友表示赞同!
这篇文章的示例让我对基础绘图有了更深的理解。尤其是你对不同图形的适用场景分析,让我在实际工作中受益匪浅。期待你分享更多技巧!
有14位网友表示赞同!
我觉得这篇文章的深度不够,很多基础绘图的细节没有被提及。虽然基础绘图系统是个好工具,但我希望能看到更复杂的应用案例。
有16位网友表示赞同!
这篇文章真的很有帮助!我之前对R的基础绘图系统一知半解,现在终于明白了如何使用它。你的示例代码也很实用,感谢你的分享!
有8位网友表示赞同!