第三章 图形初阶

数据可视化,绝对是一门艺术。完美的数据,需要有完美的图片来展示。人类非常善于从视觉呈现中洞察关系。一幅精心绘制的图形能够帮助你在数以千计的零散信息中做出有意义的比较,提炼出使用其他方法时不那么容易发现的模式。而R具有顶尖水准的制图功能,进行很好的可视化。


Twitter和Flickr的使用情况可视化,白色的是同时使用两者,蓝色的是Twitter,黄色的是Flickr
Facebook的使用情况
Meteor showers on Earth

3.1 使用图形

R是一个惊艳的图形构建平台。在通常的交互式会话中,你可以通过逐条输入语句构建图形,逐渐完善图形特征,直至得到想要的结果。

attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)

3.2 一个简单的例子

病人对药物的相应
# 数据导入R中
dose  <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
# 绘图,对药物A的响应
plot(dose, drugA, type="b")
对药物A的响应

plot()是一个函数,plot(x, y, type="b"),将x作为横轴,y置于纵轴,绘制点集,连线。选项type=“b”表示同时绘制点和线,具体的可以用?plot查看帮助选项。

3.3.1 符号和线条

使用图形参数来指定绘图时使用的符号和线条类型。

图形参数
pch种类,其中21-25可以使用col和bg来分别设置边界颜色和填充色

3.3.2 颜色

在R语言中,可以通过下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。函数colors()可以返回所有可用颜色的名称。

# RColorBrewer 这个包是用来创建吸引人的颜色配对
install.packages("RColorBrewer")
library(RColorBrewer)
n <- 7
# 产生七种颜色的向量,
mycolors <- brewer.pal(n, "Set1")
# 最后画出BAR图
barplot(rep(1,n), col=mycolors)
颜色指定参数
RColorBrewer得到的7色bars

gray()函数可以生成多阶灰度色,rainbow()可以生成连续的“彩虹型”颜色

n <- 10
mycolors <- rainbow(n)
pie(rep(1, n), labels=mycolors, col=mycolors)
mygrays <- gray(0:n/n)
pie(rep(1, n), labels=mygrays, col=mygrays)

rainbow()十色彩虹图
gray()产生的10阶灰度色

3.3.3 文本属性

图形参数同样可以用来指定字号、字体和字样。

指定文本大小的参数
指定文本大小的参数
指定字体族和字样的参数

3.3.4 图形尺寸与边界尺寸

图形尺寸和边界尺寸大小的参数
  • 通过图形参数控制图形外观
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)
# 2英寸宽,3英寸高
par(pin=c(2, 3))
# 线条宽度为默认的2倍,符号为默认的1.5倍
par(lwd=2, cex=1.5)
# 坐标轴刻度文本被设置为斜体,缩小为原来的75%
par(cex.axis=.75, font.axis=3)
# 使用红色的实心圆圈和虚线创建第一幅图
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
# 使用绿色填充的绿色菱形加蓝色虚线创建了第二幅图
plot(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="green")
# 恢复初始的图形参数设置
par(opar)   
DrugA反应
DrugB反应

par() 的参数设定对两幅图都有效,而在plot()函数中指定的函数只对当前的图有效。

3.4 添加文本、自定义坐标轴和图例

可以添加标题main、副标题sub、坐标轴标签(xlab、ylab)并指定了坐标轴范围(xlim、ylim)。当然并不是所有的函数都支持这些选项。

plot(dose, drugA, type="b",  
     col="red", lty=2, pch=2, lwd=2,
     main="Clinical Trials for Drug A", 
     sub="This is hypothetical data", 
     xlab="Dosage", ylab="Drug Response",
     xlim=c(0, 60), ylim=c(0, 70))
文本添加

3.4.1 标题

title()函数可以为图形添加标题和坐标轴标签,当然也是可以指定其他图形参数。调用形式:
title(main="", sub="", xlab="", ylab="", col.main="")

3.4.2 坐标轴

可以使用axis()函数来创建自定义的坐标轴,但是你要禁止使用绘图函数自动生成的坐标轴,axes=FALSE禁用全部坐标轴,坐标轴创建的选项:

坐标抽创建选项

自定义坐标轴的例子:

x <- c(1:10)
y <- x
z <- 10/x
# 保存当前的所有参数
opar <- par(no.readonly=TRUE)
# 设置边界大小
par(mar=c(5, 4, 4, 8) + 0.1)
# 绘图,符号是21,线是红色,
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)
# 在左边建立y轴,坐标轴刻度为x向量,颜色红色,垂直于坐标抽
axis(2, at=x, labels=x, col.axis="red", las=2)
# 在右边建立坐标轴,刻度为z向量保留两位小数,蓝色,垂直,刻度文字为70%,刻度线向外0.01
axis(4, at=z, labels=round(z, digits=2),
     col.axis="blue", las=2, cex.axis=0.7, tck=-.01)
# 为坐标轴添加文本,右边,添加y=1/x,垂直于坐标,蓝色,正常大小
mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue")
# 添加坐标轴标签
title("An Example of Creative Axes",
      xlab="X values",
      ylab="Y=X")
par(opar)
自定义坐标轴

3.4.3 参考线

abline()可以用来添加参考线,格式:abline(h=yvalues, v=xvalues),里面也是可以指定其他图形参数。

3.4.4 图例

当图形中包含的数据不止一组时,图例可以判断。legend()来添加图例:legend(location, title, legend, ...)
两种药物响应情况:

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")
abline(h=c(30), lwd=1.5, lty=2, col="gray")
library(Hmisc)
minor.tick(nx=3, ny=3, tick.ratio=0.5)
legend("topleft", inset=.05, title="Drug Type", c("A","B")
       lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))
par(opar)
比较完整的图表,但就是图例的大小没法控制好

3.4.5 文本标注

通过函数text()mtext()将文本添加到图形上。前者可向绘图区域内部添加文本,而后者向图形的四个边界之一添加文本。

两个函数的选项

示例:

attach(mtcars)
plot(wt, mpg,
     main="Mileage vs. Car Weight",
     xlab="Weight", ylab="Mileage",
     pch=18, col="blue")
text(wt, mpg,
     row.names(mtcars),
     cex=0.6, pos=4, col="red")
detach(mtcars)
添加文本

3.4.6 数学标注

函数plotmath()可以为图形主体或边界上的标题、坐标轴名称或文本标注添加数学符号。

3.5 图形组合

在R中使用函数par()layout()可以组合多幅图形为一幅总括图形。图形参数mfrow=c(nrows, ncols)按行填充和mfcol=c(nrows, ncol)按列填充。示例:

attach(mtcars)
opar <- par(no.readonly=TRUE)
# 按行填充,2x2矩阵
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)
2x2组合图

PS:这一部分内容确实比较多,整个下来比较累,进度比较慢,图形的参数确实比较多,要多练习,多用才可以。

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

推荐阅读更多精彩内容

  • 3.1 使用图形 使用代码保存图形:保存为PDF—pdf(filename),其它格式:win.metafile(...
    壹亮3278阅读 2,457评论 0 53
  • Matplotlib 入门教程 来源:Introduction to Matplotlib and basic l...
    布客飞龙阅读 31,763评论 5 162
  • 使用图形 R是一个惊艳的图形构建平台。这里我特意使用了“构建”一词。在通常的交互式会话中,你可以通过逐条输入语句构...
    defineaset阅读 103评论 0 0
  • 3.1使用图形 R是一个惊艳的图形构建平台。这里我特意使用了构建一词。在通常的交互式会话中,你可以通过逐条输入语句...
    白马少年说阅读 2,934评论 4 6
  • 每个男生大概都有那么一段故事,要么柔情万种,要么热血江湖,要么撕心裂肺,要么忍辱负重。 只不过说实话,很少有人会讲...
    府罗将相阅读 94评论 0 0