R是一个惊艳的图形构建平台,这也是R语言的强大之处。本文将分享R语言简单的绘图命令。

  本文所使用的数据或者来自R语言自带的数据(mtcars)或者自行创建。

  首先,让我们来看一个简单例子:

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
plot(dose, drugA)

绘制的图形如下:

![这里写图片描述](http://img.blog.csdn.net/20180116212628077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

  我们有必要对上述代码做些说明:首句和第二条语句创建两个向量,第三条语句打开一个图形窗口并生成一幅散点图。

  这也许是个极为简单的例子,因为并没有涉及到太多其他关于图形参数(如符号与线条,颜色,文本属性,图形尺寸和边界大小等)方面的知识。接下来,我们将在此基础上讲讲图形参数的设置。

1.1 符号与线条

if(FALSE){该例展示如何利用par函数修改图形参数}
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
if(FALSE){no.readonly=TRUE可以生成一个可以修改的当前图形参数列表}
opar <- par(no.readonly = TRUE)
if(FALSE){虚线+实三角}
par(lty=2, pch=17)
if(FALSE){b表示绘制点和线}
plot(dose, drugA, type="b")
par(opar)

绘制的图形如下:

![这里写图片描述](http://img.blog.csdn.net/20180116212709904?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

上述代码中的图形参数设置也可以通过键值对来实现,并不需要par()函数,如下:

```R
dose

  • pch:绘制点时使用的符号(范围:0~25);
  • cex:绘制符号的大小(默认值为1);
  • lty:线条类型(范围1~6);
  • lwd:线条宽度(默认值为1);
  • 1.2 颜色

      R语言图形的颜色参数常用如下:

    • col:默认绘图颜色;
    • col.axis:坐标轴刻度文字的颜色;
    • col.lab:坐标轴标签的颜色;
    • col.main:标题的颜色;
    • col.sub:副标题的颜色;
    • fg:图形的前景色;
    • bg:图形的背景色;

      在R中,可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。例如,col=1,col="white",col="#FFFFFF",col=rgb(1,1,1)和col=hsv(0,0,1)都表示白色。

      示例代码:

    dose <- c(20, 30, 40, 45, 60)
    drugA <- c(16,20,27,40,60)
    opar <- par(no.readonly = TRUE)
    par(lty=2,pch=17,col.axis=2,fg=rgb(0,0,1),bg='gray')
    plot(dose,drugA,type="b")
    par(opar)

    绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116212755086?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    1.3 文本属性

      R语言图形的文本大小参数如下:

    • cex:相对于默认大小缩放倍数的数值;
    • cex.axis:坐标轴刻度文字的缩放倍数;
    • cex.lab:坐标轴标签的缩放倍数;
    • cex.main:标题的缩放倍数;
    • cex.sub:副标题的缩放倍数;

      R语言图形的字体族、字号和字样的参数如下:

    • font:绘图时使用的字体样式(整数,范围:1~5);
    • font.axis:坐标轴刻度文字的字体样式;
    • font.lab:坐标轴标签的字体样式;
    • font.main:标题的字体样式;
    • font.sub:副标题的字体样式;
    • ps:字体磅数(最终大小为:ps*cex)
    • family:绘制文本时使用的字体族;

      示例代码:

    dose <- c(20, 30, 40, 45, 60)
    drugA <- c(16,20,27,40,60)
    opar <- par(no.readonly = TRUE)
    par(lty=2,pch=17,cex.axis=2, font.lab=4 )
    plot(dose,drugA,type="b")
    par(opar)

    绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116212824928?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    1.4 图形尺寸和边界大小

      R语言图形的控制图形尺寸和边界大小参数如下:

    • pin:以英寸表示的图形尺寸(宽和高);
    • mai:数值向量表示边界大小,顺序为“下左上右”,单位为英寸;
    • mar:数值向量表示边界大小,顺序为“下左上右”,单位为英分;

      示例代码:

    dose <- c(20, 30, 40, 45, 60)
    drugA <- c(16,20,27,40,60)
    opar <- par(no.readonly = TRUE)
    par(pin=c(3,2))
    plot(dose,drugA,type="b")
    par(opar)

    绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116212912294?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

      接下来的部分虽然不属于图形参数,但对于图形来说依然十分重要!为了保持叙述流畅,将沿用上面的序号。

    1.5 坐标轴、标题

      R语言的图形坐标轴选项如下:

    • xlab:x轴标签;
    • ylab:y轴标签;
    • xlim:x轴范围;
    • ylim:y轴范围;

      标题选项如下:

    • main:主标题;
    • sub:副标题;
    • title():函数,可添加坐标轴标签和标题;

      示例代码:

    dose <- c(20, 30, 40, 45, 60)
    drugA <- c(16,20,27,40,60)
    plot(dose,drugA,type="b",
    xlab='x:dose',ylab='y:drugA',
    xlim=c(20,60),ylim=c(15,60),
    main='drugA over dose',sub='As exmaple')

    绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116212944512?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    1.6 自定义坐标轴、文本标注、参考线

      自定义坐标轴(axis)的参数如下:

    • side:1=下,2=左,3=上,4=右;
    • at:数值型向量,表示绘制刻度线的位置;
    • labels:字符型向量,表示刻度线旁边的文字标签;
    • pos:坐标轴线绘制位置的坐标;
    • lty:线条类型;
    • col:线条和刻度线的颜色;
    • las:标签是否平行于(=0)或垂直于(=2)坐标轴
    • tck:刻度线的长度;
    • ...

      R语言的文本标注有text()和mtext(),其中text()可向绘图区域内部添加文本,mtext()则向图形的四个边界之一添加文本,它们的参数如下

    • location:文本的位置参数,可用(x,y)坐标,也可交互式添加;
    • pos:文本相对于位置参数的方位,1=下,2=左,3=上,4=右。
    • side:放置文本的边,1=下,2=左,3=上,4=右;

    其他常用的选项有cex,col和font(分别来调整字号、颜色和字体样式)。R语言还支持数学标注,标注语法类似于Tex.

      参考线的函数为abline(),语法为:

    abline(h=yvalues, v=xvalues)

    abline()中也可以指定其它图形参数,如线条类型、颜色和宽度。

      示例代码:

    x <- c(1:10)
    y <- x
    z <- 10/x
    opar <- par(no.readonly = TRUE)
    if(FALSE){边界大小}
    par(mar=c(5,4,4,8)+0.1)
    plot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann = FALSE)
    lines(x,z,type="b",pch=22,col="blue",lty=2)
    if(FALSE){自定义坐标轴}
    axis(2,at=x,labels=x,col.axis="red",las=2)
    axis(4,at=z,labels=round(z,digits=2),col.axis="blue",las=2,cex.axis=0.7,tck=-0.01)
    if(FALSE){文本标注}
    mtext("y=10/x",side=4,line=3,cex.lab=1,las=2,col="blue")
    if(FALSE){标题+坐标轴标签}
    title("An Example of Creative Axes", xlab="X values",ylab="Y=X")
    if(FALSE){参考线}
    abline(h=seq(1,10,2), lty=2, col="blue")
    par(opar)

    绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116213022792?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    1.7 图例

      R语言中的图例函数为legend(),参数如下:

    • location:指定(x,y)坐标,或使用关键字(如:topleft),或交互式指定位置;
    • title:图例标题的字符串(可选);
    • legend:图例标签组成的字符型向量;
    • ...

    其它选项还包括:指定盒子样式的bty,背景色:bg,大小:cex,文本颜色:text.col等。

      示例代码如下:

    dose <- c(20,30,40,45,60)
    drugA <- c(16,20,27,40,60)
    drugB <- c(15,18,25,31,40)
    opar <- par(no.readonly = TRUE)
    par(lwd=2, cex=1.5, font.lab=2)
    plot(dose,drugA,type="b",pch=15,lty=1,col="red",ylim=c(0,60),
    main="Drug A vs. Drug B",xlab="Drug Dosage",ylab="Drug Response")
    lines(dose,drugB,type="b",pch=17,lty=2,col="blue")
    legend("topleft",inset=.05,title="Drug Type",c("A","B"),lty=c(1,2),pch=c(15,17),col=c("red","blue"))
    par(opar)

    绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116213439137?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    1.8图形的组合

      在R语言中,可用函数par()或layout()组合多幅图形为一幅总括图形。在par()函数中可用mfrow=c(nrows,ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。layout()的调用形式为layout(mat),其中mat为矩阵,制定了组合的多个图形的所在位置,可以跨行或跨列。

      示例代码1如下:

    attach(mtcars)
    opar <- par(no.readonly = TRUE)
    par(mfrow=c(2,2))
    plot(wt,mpg,main="scatterplot of wt vs. mpg")
    plot(wt,disp,main="scatterplot of wt vs. disp")
    hist(wt,main="Histogram of wt")
    boxplot(wt,main="boxplot of wt")
    par(opar)
    detach(mtcars)

      绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116212132142?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

      示例代码2如下:

    attach(mtcars)
    layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths = c(3,1),heights = c(1,2))
    hist(wt)
    hist(mpg)
    hist(disp)
    detach(mtcars)

      绘制的图形如下:

    ![这里写图片描述](http://img.blog.csdn.net/20180116212039975?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

      以上的内容参考自《R语言实战》。关于图形的设置就讲到这儿了,终于可以舒一口气了~~下面我们将尝试着自己来绘制图形

      我们将要绘制的图形来自于:http://www.runoob.com/try/try.php?filename=HighchartsTest ,这个图形使用HighCharts绘制的,我们将用R语言来绘制这个图形。代码如下:

    x <- seq(1,12)
    months <- c('一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月')
    Tokyo <- c(7.0,6.9,9.5,14.5,18.2,21.5,25.2,26.5,23.3,18.3,13.9,9.6)
    New_York <- c(-.2,.8,5.7,11.3,17.0,22.0,24.8,24.1,20.1,14.1,8.6,2.5)
    Berlin <- c(-.9,.6,3.5,8.4,13.5,17.0,18.6,17.9,14.3,9.0,3.9,1.0)
    London <- c(3.9,4.2,5.7,8.5,11.9,15.2,17.0,16.6,14.2,10.3,6.6,4.8)
    opar <- par(no.readonly = TRUE)
    par(bty="n")
    plot(Tokyo,xaxt="n",pch=19,type="b",lwd=2,
    main="月平均气温",sub="Plotted by R Language",
    ylim=c(-10,30),col="blue",xlab="",ylab="Temperature(℃)",axes=FALSE)
    lines(New_York,type="b",pch=18,col="black",lwd=2)
    lines(Berlin,type="b",pch=15,col="green",lwd=2)
    lines(London,type="b",pch=17,col="orange",lwd=2)
    axis(2,at=seq(-10,30,10),tick=F)
    axis(1,at=x,labels=months,las=2)
    abline(h=c(0,10,20,30),col="gray")
    legend("topright",c("Tokyo","New York","Berlin","London"),pch=c(19,18,15,17),
    col=c("blue","black","green","orange"),bty="n")
    par(opar)

    绘制的图形如下:

    ![模拟HighCharts的绘图](http://img.blog.csdn.net/20180116211910179?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamNsaWFuOTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

      本次分享到此结束,欢迎大家交流~~

    R语言学习笔记(五)绘图(1)的更多相关文章

    1. R语言学习笔记2——绘图

      R语言提供了非常强大的图形绘制功能.下面来看一个例子: > dose <- c(20, 30, 40, 45, 60)> drugA <- c(16, 20, 27, 40, ...

    2. Go语言学习笔记五: 条件语句

      Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

    3. R语言学习笔记:基础知识

      1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...

    4. R语言学习笔记——C#中如何使用R语言setwd()函数

      在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...

    5. R语言学习2:绘图

      本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...

    6. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

      博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

    7. R语言学习笔记(二)

      今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...

    8. R语言学习笔记:日期处理

      1.取出当前日期 Sys.Date() [1] "2014-10-29" date()  #注意:这种方法返回的是字符串类型 [1] "Wed Oct 29 20:36: ...

    9. R语言学习笔记:小试R环境

      买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...

    随机推荐

    1. MPLAB X IDE V4.15 创建工程,编译,问题处理

      初步接触,有错误的地方还请大神们务必提出来,防止误导他人 硬件环境:MCU--PIC18F67K22 仿真下载器--ICD 3 编译环境:MPLAB X IDE V4.15 中文版 工作需要接触到了P ...

    2. jQuery的事件,动画效果等

      一.事件 click(function(){}) 点击事件 hover(function(){})   悬浮事件,这是jQuery封装的,js没有不能绑定事件 focus(function(){}) ...

    3. spring中的aop演示

      一.步骤(XML配置) 1.导包4+2+2+2 2.准备目标对象 3.准备通知 4.配置进行织入,将通知织入目标对象中 <! -- 3.配置将通知织入目标对象> 5.测试 二.步骤(注解配 ...

    4. LOJ-10105(欧拉回路模板,套圈法,递归)

      题目链接:传送门 思路: (1)用邻接表存储有向图和无向图,有向图和无向图的每条边均站两个单元,无向图有正向边和反向边的区分. (2)有向图有欧拉回路:所有点的入度=出度: 无向图有欧拉回路:所有点的 ...

    5. maven学习三

      做项目时使用maven构建项目已经是现在的流行做法了.那么maven的作用是什么呢?maven中的几个常用的命令都有什么用?下面我们来看一下. maven最大的作用就是用于对项目中jar包依赖的统一管 ...

    6. 《mysql必知必会》学习_第14章_20180806_欢

      第14章:使用子查询. 子查询是镶嵌在其他查询里面,相当其他的select查询的条件来. P91 select order_num from where prod_id='tnt2';   #检索条件 ...

    7. Docker 启动不了容器的问题

      今天在运行 docker 的时候,就是执行 docker exec 命令的时候,发现一直报错.具体的报错信息如下: Error response from daemon: Container XXX ...

    8. 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲

      作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43041-1-1.html 0×00 序言: 1.自从上次笔者调戏完盗取文件密码大黑客后, ...

    9. 漏洞应急响应之批量poc验证

      1.文章难易度 [★★★] 2.文章知识点: python,poc验证; 3.文章作者: 野驴 4.本文参与 i春秋学院原创文章奖励计划,未经许可禁止转载! 0x01前言 当互联网爆出高危漏洞,或者团 ...

    10. HashMap的源码分析

      hashMap的底层实现是 数组+链表 的数据结构,数组是一个Entry<K,V>[] 的键值对对象数组,在数组的每个索引上存储的是包含Entry的节点对象,每个Entry对象是一个单链表 ...