plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键,所以就详细来看看plot的所有可设置参数及参数设置方法。R语言的基础绘图系统主要由基础包graphics提供,它包含了各式的图形绘制函数,如折线图、直方图、箱形图等,这里主要介绍plot()函数的用法,它主要用于绘制散点图和折线图。

一、plot函数用法

plot()是常见的作图函数,其中的参数是需要熟悉的,以便在作图过程中更加灵活的处理图形的元素。

plot(x, y = NULL, type = "p", xlim = NULL, ylim = NULL, log = "", main = NULL, sub = NULL, xlab = NULL, ylab = NULL, ann = par("ann"), axes = TRUE, frame.plot = axes, panel.first = NULL, panel.last = NULL, asp = NA, xgap.axis = NA, ygap.axis = NA,   ...)
  • x相当于自变量,y相当于因变量;
  • y没缺省时,必须和x同长度,类型是可以向量化的数据结构,如向量、矩阵的行或列、数组的元素、数据框的列、列表的元素等;
  • y缺省时,x为单列时,y默认为c(1:n),其中n为x的长度;
  • y缺省时,x为两列的矩阵或数据框,则该矩阵或数据框的第一、二列分别对应自变量和因变量。

Arguments

参数 描述
x,y the x and y arguments provide the x and y coordinates for the plot. Any reasonable way of defining the coordinates is acceptable
type character string giving the type of plot desired. The following values are possible
pch a vector of plotting characters or symbols: see points
main a main title for the plot, see also title
sub Sub-title (at bottom) using font, size and color par(c("font.sub", "cex.sub", "col.sub"))
xlab ylab a label for the x axis, defaults to a description of x, y
col the foreground color of symbols as well as lines 用于指定颜色的参数,默认的绘图颜色。某些函数(如lines和pie)可以接受一个含有颜色值的向量并自动循环使用
cex a numerical vector giving the amount by which plotting charactersand symbols should be scaled relative to the default
lty 用于线条类型的定义,指定值为整数,lty="1" lty="0"显示为空白,即无线条; lty="1"显示为实线线条;lty="2"显示为虚线线条;lty="3"显示为点状线条 等

二、plot参数精解

plot函数是一个泛型函数,是R基础绘图中的高级函数,不仅在一般图形绘制中需要用到,在模型的可视化也会用的,这里将Plot()常见的参数做一个讲解。

2.1 type参数设置绘图类型

参数 说明
"p" for points 散点图 默认
"l" for lines 线图
"b" for both 描点连线,点与线不相连
"c" for the lines part alone of "b" 线图,点空白
"o" for both ‘overplotted’ 描点连线,线穿过点
"h" for ‘histogram’ like (or ‘high-density’) vertical lines 从0出发的垂线
"s" for stair steps 阶梯图
"S" for other steps, see ‘Details’ below
"n" for no plotting 空白图,只生成适合的横纵坐标轴
dev.off()
par(mfrow=c(2,4)) #2行4列
mtcars<-mtcars[order(mtcars$wt),]
plot(mtcars$wt,mtcars$disp,type='p',main="type='p'")
plot(mtcars$wt,mtcars$disp,type='l',main="type='l'")
plot(mtcars$wt,mtcars$disp,type='b',main="type='b'")
plot(mtcars$wt,mtcars$disp,type='c',main="type='c'")
plot(mtcars$wt,mtcars$disp,type='o',main="type='o'")
plot(mtcars$wt,mtcars$disp,type='h',main="type='h'")
plot(mtcars$wt,mtcars$disp,type='s',main="type='s'")
plot(mtcars$wt,mtcars$disp,type='S',main="type='S'")

2.2 pch参数设置点符号符号类型

plot函数中还有个pch参数是控制点的类型的,取值意义如下:


dev.off()
par(mfrow=c(2,4))#2行4列
plot(mtcars$wt,mtcars$disp,pch=1,main="pch=1")
plot(mtcars$wt,mtcars$disp,pch=3,main="pch=3")
plot(mtcars$wt,mtcars$disp,pch=5,main="pch=5")
plot(mtcars$wt,mtcars$disp,pch=7,main="pch=7")
plot(mtcars$wt,mtcars$disp,pch=9,main="pch=9")
plot(mtcars$wt,mtcars$disp,pch=11,main="pch=11")
plot(mtcars$wt,mtcars$disp,pch=13,main="pch=13")
plot(mtcars$wt,mtcars$disp,pch=15,main="pch=15")

2.3 lty参数设置线条类型

dev.off()
par(mfrow=c(2,3))
plot(mtcars$wt,mtcars$disp,type='l',lty=1,lwd=2,main="lty=1")
plot(mtcars$wt,mtcars$disp,type='l',lty=2,lwd=2,main="lty=2")
plot(mtcars$wt,mtcars$disp,type='l',lty=3,lwd=2,main="lty=3")
plot(mtcars$wt,mtcars$disp,type='l',lty=4,lwd=2,main="lty=4")
plot(mtcars$wt,mtcars$disp,type='l',lty=5,lwd=2,main="lty=5")
plot(mtcars$wt,mtcars$disp,type='l',lty=6,lwd=2,main="lty=6")

三、plot作图图例legend操作

Graphics包中与plot函数配套的一些低级绘图函数

函数 描述
abline 为图形添加截距为a、斜率为b的直线
arrows 在坐标点(x0,y0)和(x1,y1)之间绘制线段,并在端点处添加箭头
box 绘制图形的边框
layout 布局图形页面
legend 在坐标点(x,y)处添加图例
lines 在坐标点(x,y)之间添加直线
mtext 在图形区域的边距或区域的外部边距添加文本
points 在坐标点(x,y)处添加点
polygon 沿着坐标点(x,y)绘制多边形
polypath 绘制由一个或多个连接坐标点的路径组成的多边形
resterimaga 绘制一个或多个网络图像
rect 绘制一个左下角在(xleft,ybottom)处、右下角在(xright,ytop)处的矩形
rug 添加地毯图
segments 在坐标点(x0,y0)和(x1,y1)之间绘制线段
text 在坐标点(x,y)处添加文本
title 为图形添加标题
xspline 根据控制点(x,y)绘制x样条曲线(平滑曲线)

我们在一个图中画多组对象的时候,这个时候就需要图例来帮助我们读图,比如对下面的图,这个图中有两组数据,但却没有图例,我们不知道三角形和圈圈代表谁:

我们想加一个图例,这个时候就需要继续运行legend函数,比如我想圈圈代表‘关注’,三角代表‘Codewar’,这样就可以写出如下代码,这儿的“关注”和“Codewar”你都可以换成你想的任何字符哈,这里仅用它举例

legend(0,800,
c("关注","Codewar"), pch=c(19,17), col=c("lightblue","blue"))

图例当然也可以改,首先就是改位置,位置的关键字有9个,对应的位置如下图:

图例的位置可以用关键字改,也可以更加的个性化,用坐标改也是可以的,其可以接受的参数如下图:

比如想将原来的图例换成红色的背景,然后放在(25,800)这个坐标上,注意这个坐标与已画的图形相匹配,依据的是所做图的位置坐标,是相对数!!!,就可以写出如下代码:

legend(25,800,
bg = 'red',
c("关注","Codewar"), pch=c(19,17), col=c("lightblue","blue"))

运行后得到下图:

大家可以看到一个红色背景的图例已经在对应位置加上了,但是仔细观察上图,其实我们现在图是没有边框的,这个时候图例加个边框也不合适,所以我还想设置下图例的边框,甚至我还想改图例中的字体,甚至图例整体的大小,甚至是....统统都是可以的哈,就是这么牛!比如,我现在突发奇想,我想给我的图例加一个标题,再将其变小一点,放在右下角,并且让图例中的字水平排列,我就可以写出如下代码:

legend("bottomright", title="欢迎大家",
c("关注","Codewar"),col=c("lightblue","blue"), horiz=TRUE, cex=0.4,
box.lty=0,
bg = 'red',
text.font=4
)

依然是给大家解释下上面代码中各个参数的意思:bottomright是图例位置的关键字,title是标题字符,horiz是图例内容水平排列,cex是图例整体大小,box.lty是图例边框(取0就是无框),text.font是字体(取4就是斜体)

四、plot作图示例

4.1 例1

plot(mtcars)

4.2 例2

par(mfrow=c(1,1), mai=c(0.7, 0.7, 0.4, 0.4), cex=0.8)
set.seed(1)
x <- rnorm(200) #产生200个服从正态分布的随机数
y <- 1+2*x+rnorm(200)
d <- data.frame(x, y)
plot(x, y) # 绘制散点图
#综合定制示例
plot(x, y, xlab='x=自变量', ylab='y=因变量') # 添加坐标轴标题
grid(col='grey60') # 添加网格线
axis(side=4, col.ticks='blue', lty=1) # 绘制坐标轴
polygon(d[chull(d),], lty=6, lwd=1, col='lightgreen') # 添加多边形
points(d) # 重新绘制散点图
points(mean(x), mean(y), pch=19, cex=5, col=2)# 添加均值点
abline(v=mean(x), h=mean(y), lty=2, col='gray30') # 添加均值水平线和垂直线
abline(lm(y~x), lwd=2, col=2) # 添加回归直线
lines(lowess(y~x, f=1/6), col=4, lwd=2, lty=6)# 添加拟合曲线
segments(-0.8, 0, -1.6, 3.3, lty=6, col='blue')# 添加线段
arrows(0.45, -2.2, -0.8, -0.6, code=2, angle=25, length=0.06, col=2)
# 添加带箭头的线段
text(-2.2, 3.5, labels=expression('拟合的曲线'), adj=c(-0.1, -0.02),col=4)
# 添加注释文本
rect(0.4, -1.6, 1.6, -3.5, col='pink', border='grey60') # 添加矩形
mtext(expression(hat(y)==hat(beta)[0]+hat(beta)[1]*x), cex=0.9, side=1,
line=-5.3, adj=0.72) # 添加注释表达式
legend('topleft', legend=c('拟合的直线', '拟合的曲线'), lty=c(1, 6),
col=c(2, 4), cex=0.8, fill=c('red', 'blue'), box.col='grey60',
ncol=1, inset=0.02) # 添加图例
title('散点图及拟合直线和曲线\n并为图形添加新的元素',
cex.main=0.8, font.main=4) # 添加标题并换行,使用斜体字
box(col=4, lwd=2) # 添加边框

总结

R语言以其精美的图形而著称,它具有丰富的函数集,可用于构建和格式化任何种类的图形以及plot()功能家族之一,可以帮助我们构建这些家族。用R语言画图,plot函数的使用频率应该是最高了,灵活运用会添光添彩。这些参数即可以在plot()中设置,也可以在一些依赖于plot()函数才能生效的其他函数中进行设置,最后都作用于plot()绘制的图形。

参考文献

R语言绘图基础教程

R语言(4) plot函数介绍

R语言绘图基础教程

R可视化:plot函数基础操作,小白教程

R语言绘图基础

Plot函数用法详解——R语言的更多相关文章

  1. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

  2. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  3. 转载 LayoutInflater的inflate函数用法详解

    http://www.open-open.com/lib/view/open1328837587484.html LayoutInflater的inflate函数用法详解 LayoutInflater ...

  4. SQL中CONVERT()函数用法详解

    SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...

  5. php中setcookie函数用法详解(转)

    php中setcookie函数用法详解:        php手册中对setcookie函数讲解的不是很清楚,下面是我做的一些整理,欢迎提出意见.        语法:        bool set ...

  6. eval()函数用法详解

    eval()函数用法详解:此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval()函数的用法.语法结构: eval(str) 此函数可以接受一个字符串str作为参数, ...

  7. delphi中Application.MessageBox函数用法详解

    delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...

  8. R语言do.call 函数用法详解

    虽然R语言有类型很丰富的数据结构,但是很多时候数据结构比较复杂,那么基本就会用到list这种结构的数据类型.但是list对象很难以文本的形式导出,因此需要一个函数能快速将复杂的list结构扁平化成da ...

  9. Rserve详解,R语言客户端RSclient【转】

    R语言服务器程序 Rserve详解 http://blog.fens.me/r-rserve-server/ Rserve的R语言客户端RSclient https://blog.csdn.net/u ...

  10. Python3中正则模块re.compile、re.match及re.search函数用法详解

    Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...

随机推荐

  1. 基于docker搭建Jenkins+git+python+allure

    实现方式 docker+jenkins+python 执行自动化框架,生成allure报告 1.服务器上安装docker(略) 2.创建jenkins容器 3.使用Dockerfile创建有接口自动化 ...

  2. Promise顺序执行请求;Promise一个请求执行完成再执行另一个请求

    1 函数名() { 2 new Promise(resolve => { 3 this.$rest.请求名1().then(res =>{ 4 // 请求成功后改变状态 5 resolve ...

  3. Educational Codeforces Round 2 个人总结A-E

    Educational Codeforces Round 2 A. Extract Numbers 简单的模拟 bool check(string op) { if(op.size()==1& ...

  4. LeetCode刷题感想之DFS

    在剑指Offer里专门有一个部分(大概是连续十几题的样子)考察了 DFS ,也就是深度优先遍历,感觉DFS 也是一种套路,只要思路找对,套一下思路也可以了,在这里记录一下. 在很多Leetcode 的 ...

  5. Navicat Premium 12 安装破解过程 (经过测试)

    @ 目录 下载安装 下载 解压文件目录 安装使用步骤截图 1. 安装navicat120_premium_cs_x64.exe 软件 2. 解压Navicat.Premium 破解补丁.rar 3. ...

  6. 熟悉Hadoop及其操作 3

    启动hdfs 查看与创建hadoop用户目录. 在用户目录下创建与查看input目录.   将hadoop的配置文件上传到hdfs上的input目录下.运行MapReduce示例作业,输出结果放在ou ...

  7. NOIP2019 树的重心

    Description \[\sum_{(u,v)\in E}\Biggl(\sum_{x为S_u重心}x+\sum_{y为S_v重心}y\Biggr) \] \(1\leqslant n\leqsl ...

  8. RKO组——冲刺随笔(2)

    这个作业属于哪个课程 至诚软工实践F班 这个作业要求在哪里 第五次团队作业:项目冲刺 这个作业的目标 记录冲刺计划.要求包括当天会议照片.会议内容以及项目燃尽图(项目进度) 1.昨日进展 已开始着手模 ...

  9. [Cisco] Policy Based Routing

    在某些情況下,會希望指定特定的來源及目的走特定的出口,卻又不是全部的網段都希望套用,這時就可以透過PBR來達成這個需求. 如以下拓樸 1.1.1.0/24的網路往5.5.5.0的封包需要指定e0/1當 ...

  10. Integer类自动拆箱,装箱解析

    1.自动拆箱 例1: int i1 = 10; Integer i2 = new Integer(10); System.out.println(i1 == i2); 这个结果是true i1为基本数 ...