R语言学习笔记(五)绘图(1)

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

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

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

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

绘制的图形如下:

简单例子

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

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

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)

绘制的图形如下:

图形参数:符号与线条

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

dose <- c(20, 30, 40, 45, 60)
drugA <- c(16,20,27,40,60)
plot(dose, drugA, type="b",lty=2,pch=17)

  可以设置的符号和线条的参数有:

  • 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)

绘制的图形如下:

图形参数:颜色

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)

绘制的图形如下:

图形参数:文本属性

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)

绘制的图形如下:

图形参数:图形尺寸和边界大小
图形参数:图形尺寸和边界大小

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

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')

绘制的图形如下:

坐标轴、标题
坐标轴、标题

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)

绘制的图形如下:

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

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)

绘制的图形如下:

图例

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)

  绘制的图形如下:

图形的组合1

  示例代码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)

  绘制的图形如下:

图形的组合2

  以上的内容参考自《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的绘图

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260