3.1 图形示例、存储及多图切换
- 绘图示例
#图形示例
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
plot(dose, drugA, type="b")
#选项type="b"表示同时绘制点和线
#plot()是R中为对象作图的一个泛型函数
#(它的输出将根据所绘制对象类型的不同而变化)
#绘制图形
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt)) #在图形中添加入拟合直线
title("Regression of MPG on Weight") #添加标题
detach(mtcars)
- 图形存储
#存储图片方法一
pdf("mygraph.pdf") #将图形存储为pdf文件
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)
dev.off()
#存储图片方法二
#点击窗口Export中Save as
- 多图切换
#方法一:使用dev.new()函数
dev.new()
statements to create graph 1
dev.new()
statements to create a graph 2
etc.
#方法二
#使用视图界面的左右箭头切换
3.2 图形参数
par() #生成一个含有当前图形参数设置的列表
par(no.readonly=TRUE) #生成一个可以修改的当前图形参数列表
par(optionname=value,
optionname=name,...) #用于修改参数
代码示例
opar <- par(no.readonly=TRUE) #将原始参数保留为副本opar,便于参数恢复
par(lty=2, pch=17)
#句将默认的线条类型修改为虚线(lty=2)
#将默认的点符号改为了实心三角(pch=17)
#也可写成
#par(lty=2)
#par(pch=17) 的格式
plot(dose, drugA, type="b")
par(opar) #恢复原始参数
#效果相同,但参数仅针对绘制图形有效
plot(dose, drugA, type="b", lty=2, pch=17)
3.2.1 符号和线条
代码示例
plot(dose, drugA, type="b", lty=3, lwd=3, pch=15, cex=2)
3.2.2 颜色
可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色
举例来说,col=1、col="white"、col="#FFFFFF"、col=rgb(1,1,1)和col=hsv(0,0,1),都表示白色
函数rgb()可基于红-绿-蓝三色值生成颜色,而hsv()则基于色相- 饱和度-亮度值来生成颜色
colors() #返回所有可用颜色的名称
#多种用于创建连续型颜色向量的函数
rainbow()
heat.colors()
terrain.colors()
topo.colors()
cm.colors()
#颜色配对
install.packages("RColorBrewer")
library(RColorBrewer)
brewer.pal.info #得到所有可选调色板的列表
display.brewer.all() #显示输出中产生每个调色板的图形
gray(0:10/10) #生成10阶灰度色
3.2.3 文本属性
par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)
3.2.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)
par(pin=c(2, 3))
par(lwd=2, cex=1.5)
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)
3.3 添加文本、自定义坐标轴和图例
代码示例
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))
#xlab:x轴标签
#ylab:y轴标签
#sub:副标题
#xlim:x轴范围
运行结果
注意事项
- 并非所有函数都支持这些选项
- 某些高级绘图函数已经包含了默认的标题和标签。你可以通过在plot()语句或单独的 par()语句中添加 ann=FALSE 来移除它们。
3.3.1 标题
title()函数
#添加标题
title(main="main title", sub="subtitle",
xlab="x-axis label", ylab="y-axis label")
#设置颜色
title(main="My Title", col.main="red",
sub="My Subtitle", col.sub="blue",
xlab="My X label", ylab="My Y label",
col.lab="green", cex.lab=0.75)
3.3.2 坐标轴
注意
- 参数axes=FALSE将禁 用全部坐标轴,包括坐标轴框架线
- 参数frame.plot=TRUE则可恢复坐标轴框架线,但刻度不可恢复
- 参数xaxt="n"和 yaxt="n"将分别禁用X轴或Y轴(会留下框架线,刻度线被去除)
代码示例
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
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)
axis(2, at=x, labels=x, col.axis="red", las=2)
#其中labels是指坐标轴刻度的标签
axis(4, at=z, labels=round(z, digits=2),
col.axis="blue", las=2, cex.axis=0.7, tck=-.01)
mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue")
#用于在图形的边界添加文本,其中line表示距离边界线的远近距离
title("An Example of Creative Axes",
xlab="X values",
ylab="Y=X")
par(opar)
3.3.3 参考线
abline(h=yvalues, v=xvalues)
abline(h=c(1,5,7))
#在y为1、5、7的位置添加了水平实线
abline(v=seq(1, 10, 2), lty=2, col="blue")
#在x为1、3、5、7、9的位置添加了垂直的蓝色虚线
3.3.4 图例
bty:指定盒子样式
bg:指定背景色
cex:指定大小
text.col:指定文本颜色
horiz=TRUE:水平放置图例
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")
#Hmisc包中的tick.ratio()函数用于添加次刻度线
library(Hmisc)
minor.tick(nx=3, ny=3, tick.ratio=0.5)
#nx和ny表示刻度线间的区间数,tick.ratio表示次刻度线相对主刻度线的长度
legend("topleft", inset=.05, title="Drug Type", c("A","B")
lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))
#当图例用关键词设置位置后,inset = 分数,可以设置其相对位置
par(opar)
3.3.5 文本标注
代码示例一
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")
#wt,mpg分别定位x和y的位置,row.names()返回行名
detach(mtcars)
代码示例二
opar <- par(no.readonly=TRUE)
par(cex=1.5)
plot(1:7,1:7,type="n")
text(3,3,"Example of default text")
text(4,4,family="mono","Example of mono-spaced text")
text(5,5,family="serif","Example of serif text")
par(opar)
3.3.6 数学标注
3.4 图形的组合
- 函数par()
参数mfrow=c(nrows, ncols) 按行填充
参数mfcol=c(nrows, ncols) 按列填充
代码示例
#示例一
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)
#示例二
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)
#注:图函数hist()包含了一个默认的标题
#使用main=""可以禁用它
#或使用ann=FALSE来禁用所有标题和标签
示例一结果
示例二结果
- 函数layout()
参数widths = 各列宽度值组成的一个向量
参数heights = 各行高度值组成的一个向量
代码示例
#示例一
attach(mtcars)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
#矩阵表示图形的填充顺序,0为不填充
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#示例二
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)
示例一结果
示例二结果
- 函数fig=
1、参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量
2、fig=默认会新建一幅图形,所 以在添加一幅图到一幅现有图形上时,请设定参数new=TRUE
代码示例
opar <- par(no.readonly=TRUE)
par(fig=c(0, 0.8, 0, 0.8))
plot(mtcars$wt, mtcars$mpg,
xlab="Miles Per Gallon",
ylab="Car Weight")
par(fig=c(0, 0.8, 0.55, 1), new=TRUE)
boxplot(mtcars$wt, horizontal=TRUE, axes=FALSE)
#horizontal=TRUE表示图形水平
#axes=FALSE表示去除坐标轴
par(fig=c(0.65, 1, 0, 0.8), new=TRUE)
boxplot(mtcars$mpg, axes=FALSE)
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
par(opar)
运行结果