R极简教程-10:R语言绘图基础
R语言最强大的一点就是画图,那个无比强大的画图系统,再加上各种各样的神级R包,让我写R语言中最喜欢的一点就是写绘图代码。
简单来说,R语言原生的绘图系统已经非常强大了,根本不需要其他东西的辅助,就可以绘制非常炫目的图片,需要的仅仅是耐心。另外R语言还有一系列的绘图辅助R包,比如著名的ggplot2
,我经常用的plotly
都是很好的工具。
再近几年,R语言推出了Shiny
框架,可以用R语言快速写成一个网页,这简直不能更方便。
讲真我已经在期待R语言发布建站框架的那一天了。R已经能做分布式大数据了
RSpark
,建站还会远吗?
R语言绘图基础
再大的工程也是又一块砖一块砖垒起来了。在复杂的R图也是又忒简单的元素组成的,下面的这些东西,可谓是R绘图最基本的元素,能把它们掌握,就可以绘制出相对OK的图。
颜色
> plot(1:10,col="red")
之前提到过,绘图函数(比如bixplot或者plot)中的col
参数就是控制颜色的,而颜色的选择可以用问题,也可以用其他的一些标号,比如网站有一个很好很强大的R颜色列表
面对上面这种浩如烟海的颜色,你可以直接把那个标号:”#XXXX”用到程序里。
另外不得不推荐一个极好的R包,叫做RColorBrewer,这个包的功能主要就是提供一些自己已经配好色的R颜色,另外提供一系列颜色的分配,比如你想要从正黄色到正蓝色直接过度10个颜色,就可以用这个包。
> colorRampPalette(brewer.pal(9,"Blues"))(100) -> color
> plot(1:100,col=color,pch=20,cex=2)
这样就从白色到正蓝色划分成100个过渡色。
又如:
> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
RColorBrewer::brewer.pal
函数的功能是直接调用这个包已经配好的颜色,其中有一系列名字,我最喜欢用的就是”Set2”,因为看上去比较素雅。
文字
有时候做了一个图,想要在图中加一些问题,这个问题可以用text
函数来解决,就着刚才的图,我再继续往上边加一个”Hello World!”
> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
> text(x=4,y=4,labels = "Hello World!",cex=2)
让我们来细看一下text
函数的参数,x代表了横坐标,我这里写的是4,就是说希望写再以第四个bar为中心的位置。y代表了高度,我写的也是4,labels就是想要写的话,可以把任何的字符串嵌进来,最后一个参数是cex,这个是控制字体大小,1是默认值,如果你希望字体放大一倍,就设置为2.
根据我的经验,想要一次性画对图还是有难度的,最好还是多尝试几次。调调位置,换换
x
和y
。慢慢就可以把图做出来。
点、线
点和线是很基础的元素,点的函数是points
,线的函数是lines
,要说明的是,每一次plot都会展开一副新的图。也就是说,如果你已经用过plot画了一部分图了,还想要继续往图上添加东西,就需要用points或者lines函数,不能重新用plot。
> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
> points(rep(3,5),pch=20,cex=3,col="orange")
上面的代码,我plot的时候,再1到5个横坐标上,都再纵坐标为3的地方plot了一个橘色的点,做法其实和plot很像。
在plot或者point的时候,理论上你应该输入x,y两个参数,两者应该是完全对应的,一一对应,前者是横坐标,后者是纵坐标。但是如果你只输入了一批数据,程序就会默认横坐标为1,2,3,4……纵坐标是你输入的数值。这就是为什么,在这个函数里,我只输入了
rep(3,5)
而没有输入横坐标。
> barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
> points(rep(3,5),pch=20,cex=3,col="orange")
> lines(sample(1:5),col="gray",lwd=2,lty=2)
如果说是划线的话,也很简单,使用lines函数,用法和之前是一样的,如果你输入了对应的x,y坐标,就可以直接绘制,如果只输入一个vector,程序就默认横坐标是1,2,3……
后面的参数里,lwd
控制线的粗细,lty
控制线的类型,lty=2意思是虚线。
标题
标题其实是很容易的,只需要再plot或者其他绘图程序里,添加main
参数就行:
plot(1:10,main="This is a Title",cex.main=1.5)
这个真没什么好说的,cex.main=1.5
的意思是,标题的尺寸是标准值的1.5倍。此外值得说的是,如果你不喜欢这个Title,也可以用text手绘,那就稍微复杂一些。
图例
图例的目的就是望你看懂你在画什么,通过legend
函数我们可以添加图例。
x <- seq(-pi, pi, len = 65)
plot(x, sin(x), type = "l", ylim = c(-1.2, 1.8), col = 3, lty = 2)
points(x, cos(x), pch = 3, col = 4)
lines(x, tan(x), type = "b", lty = 1, pch = 4, col = 6)
title("legend(..., lty = c(2, -1, 1), pch = c(NA, 3, 4), merge = TRUE)",cex.main = 1.1)
legend(-1, 1.9, c("sin", "cos", "tan"), col = c(3, 4, 6),text.col = "green4", lty = c(2, -1, 1), pch = c(NA, 3, 4),merge = TRUE, bg = "gray90")
上述就是legend函数的一堆参数,其中col,lty等等都和plot一模一样。
坐标轴
坐标轴是很容易处理的东西。直接设置参数就行了。
> plot(1:10,xlab="X lab",ylab="y lab")
有一个很有意思的情况是,如果想要更换坐标轴上的1,2,3,4,5该怎么办?
plot(1:10, xaxt = "n", xlab='Some Letters')
axis(1, at=1:10, labels=letters[1:10])
甚至于,如果想要将坐标轴旋转一些角度,应该怎么办?这个问题我经常遇到,原因就是有时候label的名字太长了。。。其实代码真的超简单:
> par(las=2)
> plot(1:10, xaxt = "n", xlab='Some Letters')
> axis(1, at=1:10, labels=letters[1:10])
构图函数
根据我几年的R语言经验,构图函数真的是一个很多教材都没有认真写的东西,但实战中经常经常经常涉及这方面问题啊,在这里我记录了一下:
首先就是,如果你想在一张图上绘制多个图形怎么办?
> par(mfrow=c(2,3))
> plot(1:10)
> plot(1:10)
> plot(1:10)
> plot(1:10)
> plot(1:10)
> plot(1:10)
使用par(mfrow=c(2,3))
命令可以完成比较规则的构图,其中参数中,前一个代表行,后一个代表列,我这里的意思就是,把图片分成两行三列。
还有另外一种更为厉害的分屏:
# One figure in row 1 and two figures in row 2
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
这是我曾经最喜欢的一个多图函数,其中的设置都是再layout里边的matrix,里边你可以无限多地设置函数,每一张图可以通过数字连起来,这样就可以做出各种形状的组合图形。
R极简教程-10:R语言绘图基础相关推荐
- R learning 十八讲 0018-R语言绘图基础
0018-R语言绘图基础 2020-07-29更新:使用代码块,看起来更方便.更改了第6节: 这次不介绍如ggplot2等绘图包, 只记录一些R基础就能实现的东西~ 跟着我爪子敲一遍,相信你会有收获! ...
- R极简教程-7:读取数据
读取数据往往是进行数据分析的第一步,数据读取的方式很多,就R语言而言,常见的有几种:Load已经存好的RData,读取文本文件,读取excel文件,读取数据库文件,抓取网络数据. 读取RData RD ...
- R极简教程-3:R及RStudio的安装
说到R语言的安装,再Windows平台上是很简单的.但是再Linux平台上简直就是一场噩梦--尤其是针对最新的R3.4等版本,每一次安装R能够在2小时内弄完,我就觉得是一个成功了. 额外提一句,现在M ...
- 【一天一门编程语言】R 语言程序设计极简教程
R 语言程序设计极简教程 文章目录 R 语言程序设计极简教程 R语言简介 1.1 介绍 1.2 R 语言的基础知识 1.2.1 语法 1.2.2 数据类型 1.2.3 基本操作 1.3 R 语言的高级 ...
- 【一天一门编程语言】Matlab 语言程序设计极简教程
Matlab 语言程序设计极简教程 用 markdown 格式输出答案. 不少于3000字.细分到2级目录. 文章目录 Matlab 语言程序设计极简教程 简介 Matlab 工作空间 Matlab ...
- R count函数_[R learning]-0018-R语言绘图基础, 画了一天,不妨进来看看~
=================== = 个人练习R语言的笔记 = = 跟我一起来 Coding⑧! = =================== 0018-R语言绘图基础 2020-07-29更新: ...
- 【一天一门编程语言】Fortran 语言程序设计极简教程
文章目录 Fortran 语言程序设计极简教程 一.Fortran 语言的基本语法 1.1 注释 1.2 标识符 1.3 变量 1.4 语句 1.5 运算符 二.Fortran 语言程序的编写 2.1 ...
- 【一天一门编程语言】Go 语言程序设计极简教程
文章目录 Go 语言程序设计极简教程 Go 语言程序设计极简教程 第一章:Go 语言基础 1.1 Go 语言简介 1.2 Go 语言安装 1.2.1 下载安装包 1.2.2 安装 Go 语言 1.3 ...
- 【一天一门编程语言】JavaScript 语言程序设计极简教程
JavaScript 语言程序设计极简教程 用 markdown 格式输出答案. 不少于3000字.细分到2级目录. 一.JavaScript 简介 1.1 什么是 JavaScript JavaSc ...
最新文章
- SEO研究:网站结构
- 蚂蚁金服开源增强版 Spring Boot 的研发框架!
- java final修饰符_java final修饰符详解,final修饰方法
- 1024程序员节 继续薅羊毛
- MySQL 语句外键 连接
- 复杂查询练习_数据分析之路——复杂查询(4)
- 菜鸟学自动化测试(四)----selenium 命令之验证页面元素
- 【HDU - 1455】Sticks (dfs + 剪枝)
- 基于springboot+thymeleaf+mybatis的员工管理系统 —— 登录与注册
- Python实现查询12306火车票信息
- java spring oauth2.0_java – Spring引导oauth2管理httpbasic认证
- Node.js调试工具安装使用
- python编程符号大全_2020 年最值得学习的 5 大 AI 编程语言
- 一个可以直接套用的行星齿轮传动比(转速比)结论
- esxi6.7.0最新版本下载
- Office办公软件三十而立,从一花到多花(上)
- ACPI\VEN_LENDEV_0078[未知设备]
- Monte-Carlo Dropout(蒙特卡罗 dropout),Aleatoric Uncertainty,Epistemic Uncertainty
- 腾讯bugly热更新开发
- Python与MySQL交互——简易用户注册登录
热门文章
- C++类成员函数作回调函数
- 计算机学院教师老带新总结,教师老带新新教师总结报告
- 刷新 翻看 我 关注 实时 疫情 物联网卡小知识:互联网流量卡vs物联网流量卡孰优孰劣?
- iTunesMetadata.plist文件里的内容
- 计算机课用英语怎么说cute,it/cute是什么意思
- php 高德地图点击事件,javascript - 高德地图marker动态绑定点击问题
- 计算机组成原理实验报告6.2,计算机组成原理实验报告.doc
- how2j学习笔记(JAVA中级)
- 加载linux驱动模块时,终端提示一堆内存错误
- 我自己曾经经历的CMMI3认证通过关于软件测试的访谈