第三章 图形初阶

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


第三章 图形初阶_第1张图片
Twitter和Flickr的使用情况可视化,白色的是同时使用两者,蓝色的是Twitter,黄色的是Flickr
第三章 图形初阶_第2张图片
Facebook的使用情况
第三章 图形初阶_第3张图片
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 一个简单的例子

第三章 图形初阶_第4张图片
病人对药物的相应
# 数据导入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")
第三章 图形初阶_第5张图片
对药物A的响应

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

3.3.1 符号和线条

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

第三章 图形初阶_第6张图片
图形参数
第三章 图形初阶_第7张图片
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)
第三章 图形初阶_第8张图片
颜色指定参数
第三章 图形初阶_第9张图片
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)

第三章 图形初阶_第10张图片
rainbow()十色彩虹图
第三章 图形初阶_第11张图片
gray()产生的10阶灰度色

3.3.3 文本属性

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

第三章 图形初阶_第12张图片
指定文本大小的参数
指定文本大小的参数
第三章 图形初阶_第13张图片
指定字体族和字样的参数

3.3.4 图形尺寸与边界尺寸

第三章 图形初阶_第14张图片
图形尺寸和边界尺寸大小的参数
  • 通过图形参数控制图形外观
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)   
第三章 图形初阶_第15张图片
DrugA反应
第三章 图形初阶_第16张图片
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))
第三章 图形初阶_第17张图片
文本添加

3.4.1 标题

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

3.4.2 坐标轴

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

第三章 图形初阶_第18张图片
坐标抽创建选项

自定义坐标轴的例子:

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)
第三章 图形初阶_第19张图片
自定义坐标轴

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)
第三章 图形初阶_第20张图片
比较完整的图表,但就是图例的大小没法控制好

3.4.5 文本标注

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

第三章 图形初阶_第21张图片
两个函数的选项

示例:

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)
第三章 图形初阶_第22张图片
添加文本

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)
第三章 图形初阶_第23张图片
2x2组合图

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

你可能感兴趣的:(第三章 图形初阶)