网站首页 > 基础教程 正文
原创 小浣熊 科研猫
是时候
关注
我们一波了
在向reviewer或者导师展示自己的统计分析结果时,一张图往往顶得上千言万语;在刚接触到数据时,图也能帮助我们发现数据中潜在的模式或者其中的异常值,这两个例子都说明了绘图在数据分析中的重要性。R在这方面的表现是令人惊叹的!
这次的教程的重点就是R语言中处理图形的一般方法,包括了图形的创建和保存、图形特征的修改、一些图形处理的通用方法(后面还会重点关注特定类型的图形)以及图形组合的各种方法。
写在开篇的话,本篇教程中,我们将通过测试数据带领大家一步步绘制和美化图形,内容较多,请务必静下心来学习。
温馨提示
1、本节内容重点内容较多,
务必紧跟红色标记。
2、测试数据及代码
见文末客服小姐姐二维码。
1、图形的创建和保存
我们先来看看在R中如何创建图形和保存图形,下面例子稍微有点难度,只是先给大家做个示例。大家可以试一下下面的代码,最终结果应该如图2所示。
图1:示例代码1
图2:示例代码1创建的图形
上面的代码先绑定了mtcars这个数据框(不用担心,你没有这个数据框),plot()打开了一个图形窗口并绘制了一幅散点图,abline()添加了一条最优拟合曲线,然后给图形加上了标题并解绑数据框。
R中可以通过代码或者图形界面来保存图形,代码保存图形的方法如下图:
图3:示例代码2
除了使用pdf()函数保存为pdf文件,还可以用png(),jpeg(),bmp(),tiff(),xfig()等函数保存为其他格式(建议保存为pdf文件,因为pdf是矢量图文件,方便后续编辑修改),使用方法都比较类型就不一一列举了。
图形界面的保存方法相信就不用介绍了,大家只要努力在窗口里面找到“另存为“或者“导出”或者“export”等字样的按钮就可以了,这里也不给大家举例子了。
知道怎么创建和保存图形之后,我们还是从一个简单的例子出发给大家逐一介绍图形绘制中的各个参数。
2.一个简单的例子
图4:示范数据
考虑上面的一组数据,描述了病人对两种药物A、B五个剂量水平上的响应情况。首先可以创建一幅描述dose和drugA响应关系的图形。
图5:示例代码3
图6:dose和drugA响应关系
函数plot()是R中为对象作图的一个非常重要的泛型函数,可以通过查看该函数的帮助文档进一步了解它的细节参数。下面我们的重点在于如何修改图形的外观。
修改图形参数有两种方法,一种是通过函数par()来指定图形参数实现图形特征的定义,另一种是直接为函数plot()或者其他高级绘图函提供optionname=value的键值对。
图7:示例代码4
大家可以自己试一下上面的两种方法,看生成的图形和图6有什么不一样。
就像上面的例子展示的,图形参数可以控制图形的特征,其中用于指定符号和线条类型的参数有pch,cex,lty,lwd。
参数pch用来指定绘制点时用的符号,他的值如下图:
图8:参数pch。
参数cex则指定了符号的大小,cex是一个数值,默认大小为1,cex=0.5时表示缩小为默认值的0.5倍。参数lty用来指定想要的线条类型,参数lwd指定了线条的宽度,默认为1,lwd=2时绘制一条两倍于默认宽度的线条。
大家可以试一下下面这个图是怎么通过参数设置调整出来的(答案见文末,找胖雨小姐姐索取哦)。
图9:大家可以试一下这个效果怎么做出来的。
到目前为止,我们的图形都是黑白的,为什么不给它加上色彩呢?图形里面可以上色的地方很多,下表列出一些常用的“上色”参数。
表1:“上色”参数
R中指定颜色的方法很多,举例来说,col=1、col="white"(直接用颜色的英文名)、col="#FFFFFF"(RGB的16进制颜色编码)、col=rgb(1,1,1)和col=hsv(0,0,1) 都是表示白色的等价方式。推荐初学者就用前两种(即通过颜色下标或者名称指定颜色)。函数colors()可以返回所有可用颜色的名称。给大家推家一个R中色彩的优秀图表,参见:
https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/colorPaletteCheatsheet.pdf
(之前有人推荐,
http://research.stowers-institute.org/efg/R/Color/Chart,这个链接失效了,如果有同学还有这个图表,不妨分享给大家)。
R中的“上色”函数很多,包括rainbow()、heat.colors()、terrain.colors()、topo.colors() 以及cm.colors()。还有一些很受欢迎的“上色”函数包,比如:RColorBrewer。
图形参数还可以指定字号、字体和字样。参数cex和font分别可以控制文本的大小和字体。文本参数的设置方法和前面示例参数的设置方法大同小异,具体如下表:
表2:文本参数
图形绘制完成之后,还有一个很重要但容易被忽视的步骤,图形里面要添加图例、标注、标题等,否则谁知道你的图形要表达的含义是什么呢。举例来说,下面的代码给图形添加了标题,副标题,坐标轴标签,坐标轴范围等等。
图10:示例代码5
图11:示例代码5的结果
首先,可以用函数title()为图形添加标题和坐标轴标签。比如:
title(main="main title", sub="subtitle", xlab="x-axis label", ylab="y-axis label")
函数axis()用来创建自定义的坐标轴。
函数abline()可以用来为图形添加参考线(后面的图形中会有示例)。函数legend()用来添加图例。下面是一个综合了上面几个函数绘制的图形。
图12:添加图例的示例图形
篇幅有限,就不把代码直接贴出来了,大家感兴趣可以找胖雨小姐姐要代码哦!
有时候我们要把文本或者数字标注在图形上,这件事情在很多绘图软件中是比较难实现的一个事情,但是对R语言来说,这些都是小case。函数text()和mtext()可以帮我们解决这个问题。下面是一个用mtcars数据框实现的例子。
图13:文本标注的例子
最后,图形绘制还有一个重要的参数,就是图形尺寸和边界尺寸。参数pin,mai,mar就是用于控制这两个特征的。图例如下:
图14:图形尺寸的控制
这两个图形在一张图里面,并不是ps或者美图秀秀的功劳,这就涉及到下一次教程要说到的图形的组合了。
后面几张图的代码因为篇幅有限,都没有直接贴出来,建议大家直接联系客服小姐姐索取哦~
小结
R语言绘图其实没有任何特别难的地方,只需要多费点脑子,多多记忆函数和参数就OK了。记住一句话:编程是不会把电脑编坏的,不要把电脑当作娇花嫩草,多上手多练习才能记忆深刻。此外,据我以往多年的授课经验,课程越往后,掉队的人越多,所以,还在坚持的各位,要加油哦~
科研猫公众号,国内外顶尖高校博士及PI联手打造的科研共享中心,涵盖生物信息、实验技能、统计绘图等内容的一体化平台,不断放送科研干货,现已推出《R语言入门》、《科研绘图》、《生物信息数据挖掘》、《机器学习》等多个系列,广受粉丝欢迎。
团队开发的Hiplot绘图系统也受到科研人员的极大赞赏,日点击率达到上万人次。
https://hiplot.com.cn
关注公众号后,
回复【hiplot】可获取注册激活码,免费成为hiplot会员,实现一键作图;
加客服微信可免费领取科研干货。
科研干货示例
- 上一篇: 凭借这个插件,我终于把PPT颜色的使用搞明白了!被上司表扬了
- 下一篇: Qt—设计颜色编辑选取对话框
猜你喜欢
- 2025-05-21 一键超4400MHz!豪华灯效+高频至尊享受
- 2025-05-21 38个CSS资源升级你的CSS技能
- 2025-05-21 技嘉推出第二代RGB内存条:DDR4-3600,自带超频功能
- 2025-05-21 看网页太刺眼 换个底色护下眼
- 2025-05-21 ARTSLINK零创|设计师怎么玩红色?
- 2025-05-21 Windows 11通过修改注册表设置护眼外观
- 2025-05-21 浏览器背景惨白太刺眼 咱们给它换个shai
- 2025-05-21 Excel实战技巧1 | 让数据更醒目?单元格数值依条件用颜
- 2025-05-21 一次懂rgb(红绿蓝)颜色详细参数
- 2025-05-21 玩游戏也能学编程?我读书少,别骗我
- 05-21HTML DOM Columngroup 对象
- 05-21零基础学习HTML图像热区特殊字符无序列表和有序定义列表表格
- 05-21让div填充屏幕剩余高度的方法
- 05-21高效设计表格 - 用我们的HTML表格生成器轻松搞定
- 05-21前端入门——html 表单
- 05-21我问AI——以前网页编程流行用table布局,为什么不用了
- 05-21平和!晨间攻克 HTML 表格属性题,面试难题轻松化解
- 05-21一键超4400MHz!豪华灯效+高频至尊享受
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)