回复 第15楼 的 ypchen:谢谢,定当努力。
<br />
# 第3章 图形初阶</p>
<p># 3.1 使用图形<br />
# 3.2 一个简单的例子<br />
# 3.3 图形参数<br />
# 3.4 添加文本、自定义坐标轴和图例<br />
# 3.5 图形的组合</p>
<p># 3.1 使用图形<br />
# -----------------------------------------------------------------------------<br />
setwd("E:/") # 设置E盘根目录为当前工作目录<br />
pdf("mygraph.pdf") # 新建一个PDF文件用于存放图形<br />
attach(mtcars) # 绑定mtcars数据框<br />
plot(wt, mpg) # 对x=wt,y=mpg绘制散点图<br />
abline(lm(mpg~wt)) # 在散点图上画出回归拟合线<br />
title("Regression of MPG on Weight") # 给图加个标题<br />
detach(mtcars) # 解除mtcars数据框<br />
dev.off() # 关闭pdf文件</p>
<p># win.metafile()<br />
# png()<br />
# jpeg()<br />
# bmp()<br />
# tiff()<br />
# xfig()<br />
# postscript()<br />
# 以上这些函数也通常用来保存图形,我所熟悉的也就是png、jpeg、bmp这几种了。</p>
<p># 创建多个图形,并随时查看每一个<br />
# 第一种方法<br />
# dev.new()<br />
# statements to create graph1<br />
# dev.new()<br />
# statements to create a graph2<br />
# etc.</p>
<p># 第二种方法<br />
# dev.new()、dev.next()、dev.prev()、dev.set()、dev.off()<br />
# 使用以上函数同时打开多个窗口,并选择将哪个输出发送到哪个窗口中。</p>
<p># 3.2 一个简单的例子<br />
# -----------------------------------------------------------------------------<br />
dose <- c(20, 30, 40, 45, 60)<br />
drugA <- c(16, 20, 27, 40, 60)<br />
drugB <- c(15, 18, 25, 31, 40)<br />
plot(dose, drugA, type="b")<br />
# 以dose为x轴,drugA为y轴,画出散点图,<br />
# type="b",用线将各点连起来</p>
<p># 3.3 图形参数<br />
# 3.3.1 符号和线条<br />
# 3.3.2 颜色<br />
# 3.3.3 文本属性<br />
# 3.3.4 图形尺寸与边界尺寸<br />
# -----------------------------------------------------------------------------<br />
# 修改图形参数的一种方法是par()<br />
par()<br />
par(no.readonly=TRUE)<br />
# no.readonly=TRUE 可以生成一个可以修改的当前图形参数列表</p>
<p>opar <- par(no.readonly=TRUE) # 将默认的图形参数列表保存至opar中<br />
par(lty=3, pch=12) # 重新设置线型与点的符号,具体的数值代表的意思我也记不清,这里是瞎写的<br />
plot(dose, drugA, type="b") # 作出点图,可以看出,这里点的符号与线型与上面作出的是不一样的<br />
par(opar) # 恢复原来的图形参数</p>
<p># 也可以通过以下代码完成上面的功能<br />
plot(dose, drugA, type="b", lty=3, pch=12)</p>
<p># 用于指定符号和线条类型的参数<br />
# pch<br />
# 指定绘制点时使用的符号(0-25),对于21~25,可以指定边界的颜色(col=)和填充色(bg=)。<br />
# cex<br />
# 指定符号的大小<br />
# lty<br />
# 指定线条类型(1-6)<br />
# lwd<br />
# 指定线条宽度。<br />
plot(dose, drugA, type="b", lty=6, pch=22, lwd=1.5, cex=1.5, col="blue", bg="yellow")<br />
plot(dose, drugA, type="b", pch=22, lwd=1.5, cex=1.5, col="red", bg="yellow" ,lty=6)</p>
<p># 用于指定颜色的参数<br />
# col<br />
# col=c("red", "blue")需要绘制三条线,则第一条为红色,第二条为蓝色,第三条为红色<br />
# col.axis<br />
# 坐标轴刻度文字的颜色<br />
# col.lab<br />
# 坐标轴标签的颜色<br />
# col.main<br />
# 标题颜色<br />
# col.sub<br />
# 副标题颜色<br />
# fg 图形的前景色<br />
# bg 图形的背景色<br />
plot(dose, drugA, type="b", pch=22, lwd=1.5, cex=1.5, col="red",<br />
bg="yellow" ,lty=6, fg="green")<br />
# 在R中,可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色<br />
# 我现在也只能通过几个简单的颜色名称来指定颜色了<br />
# rgb() 基于红-绿-蓝三色值生成颜色<br />
# hsv() 基于色相-饱和度-亮度值来生成颜色<br />
# rainbow()、heat.colors()、terrain.colors()、topo.colors()、cm.colors()、gray()多阶灰度<br />
n <- 10<br />
mycolors <- rainbow(n)<br />
pie(rep(1, n), labels=mycolors, col=mycolors)<br />
mygrays <- gray(0:n/n) # 为什么不是1:n/n,这种写法挺让我理解的。<br />
pie(rep(1, n), labels=mygrays, col=mygrays)</p>
<p># 用于指定文本大小的参数<br />
# cex 指定相对于默认大小缩放的倍数<br />
# cex.axis 坐标轴刻度文字的缩放倍数<br />
# cex.tab 坐标轴标签的缩放倍数<br />
# cex.main 图形标题的缩放倍数<br />
# cex.sub 副标题的缩放倍数</p>
<p># 用于指定字体族、字号和字样的参数<br />
# font 1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体<br />
# font.axis,font.tab,font.main,font.sub 坐标轴、标题相关的字体样式<br />
# ps 字体磅值,文本的最终大小为ps*cex<br />
# family serif(衬线)、sans(无衬线)、mono(等宽)</p>
<p># par(family="sans")<br />
# 以PDF输出图形<br />
names(pdfFonts()) # 中文的楷体等怎么设置呢?<br />
pdf(file="myplot.pdf", family="fontname")</p>
<p># 用于控制图形尺寸和边界大小的参数<br />
# pin 以英寸表示的图形尺寸(宽和高)<br />
# mai 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸<br />
# mar 以数值向量表示的边界大小,单位为英分<br />
par(pin=c(4, 3), mai=c(1, .5, 1, .2))</p>
<p># 代码清单3-1 使用图形参数控制图形外观<br />
dose <- c(20, 30, 40, 45, 60)<br />
drugA <- c(16, 20, 27, 40, 60)<br />
drugB <- c(15, 18, 25, 31, 40)<br />
opar <- par(no.readonly=TRUE)<br />
par(pin=c(2, 3))<br />
par(lwd=2, cex=1.5)<br />
par(cex.axis=.75, font.axis=3)<br />
plot(dose, drugA, type="b", pch=19, lty=2, col="red")<br />
plot(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="green")<br />
par(opar)</p>
<p># 3.4 添加文本、自定义坐标轴和图例<br />
# 3.4.1 标题<br />
# 3.4.2 坐标轴<br />
# 3.4.3 参考线<br />
# 3.4.4 图例<br />
# 3.4.5 文本标注<br />
# -----------------------------------------------------------------------------<br />
plot(dose, drugA, type="b",<br />
col="red", lty=2, pch=2, lwd=2,<br />
main="A药物的治疗效果",<br />
sub="此数据纯属杜撰",<br />
xlab="剂量", ylab="A药疗效",<br />
xlim=c(0, 60), ylim=c(0,70))</p>
<p>title(main="我的标题", col.main="red",<br />
sub="我的副标题", col.sub="blue",<br />
xlab="x轴标题", ylab="y轴标题",<br />
col.lab="yellow", cex.lab=0.75) # 能不能对标题的位置进行设置呢?</p>
<p>plot(dose, drugA, type="b",<br />
col="red", lty=2, pch=2, lwd=2,<br />
xlim=c(0, 60), ylim=c(0,70), ann=FALSE)</p>
<p>title(main="A药物的治疗效果", col.main="red", font.main=2, family="serif", cex.main=3,<br />
sub="此数据纯属杜撰", col.sub="blue", font.main=1, cex.sub=1.5,<br />
xlab="剂量", ylab="A药疗效",<br />
col.lab= "green", font.axis=3, cex.axis=2)</p>
<p># axies=FALSE 禁用全部坐标轴<br />
# frame.plot=TRUE 控制坐标轴框架线的显示<br />
# xaxt="n",yaxt="n" 分别禁用x轴与y轴,会留下框架线,只是去了刻度线</p>
<p># 代码清单3-2 自定义坐标轴的示例<br />
x <- c(1:10)<br />
y <- x<br />
z <- 10/x<br />
opar <- par(no.readonly=FALSE)<br />
par(mar=c(5, 4, 4, 8) + 0.1)<br />
plot(x, y, type="b",<br />
pch=21, col="red",<br />
yaxt="n", lty=3, ann=FALSE)<br />
lines(x, z, type="b", pch=22, col="blue", lty=2) # 还没学到呢。<br />
axis(4, at=z, labels=round(z, digits=2),<br />
col.axis="blue", las=2, cex.axis=0.7, tck=-0.01)<br />
axis(2, at=x, labels=x, col.axis="red", las=2)<br />
mtext("y=10/x", side=4, line=3, cex.lab=1, las=2, col="blue") # 还没学到呢<br />
title("自定义坐标轴的示例",<br />
xlab="X",<br />
ylab="Y=X")<br />
par(opar)</p>
<p># axis(side, at=, labels=, pos=, lty=, col=, las=, tck, ...)<br />
# side 表示在图形的哪边绘制坐标轴(1=下, 2=左, 3=上, 4=右)<br />
# at 表示绘制刻度线的位置<br />
# labels 表示置于刻度线旁边的文字标签<br />
# pos 坐标轴线绘制位置的坐标<br />
# lty 线条类型<br />
# col 线条和刻度线颜色<br />
# las 标签是否平行于(=0)或垂直于(=2)坐标轴<br />
# tck 刻度线的长度,负值在外侧,正值在内侧,默认值为-0.01,1表示绘制网格线</p>
<p># 次要刻度线<br />
library(Hmisc)<br />
# minor.tick(nx=n, ny=n, tick.ratio=n)<br />
par("tck") # 获取当前的主刻度线长度<br />
minor.tick(nx=2, ny=3, tick.ratio=0.5)</p>
<p>abline(h=c(1,5,7))<br />
abline(v=seq(1, 10, 2), lty=2, col="blue")</p>
<p># 代码清单3-3 依剂量对比药物A和药物B的响应情况<br />
dose <- c(20, 30, 40, 45, 60)<br />
drugA <- c(16, 20, 27, 40, 60)<br />
drugB <- c(15, 18, 25, 31, 40)<br />
opar <- par(no.readonly=TRUE)<br />
par(lwd=2, cex=1.5, font.lab=2)<br />
plot(dose, drugA, type="b",<br />
pch=15, lty=1, col="red", ylim=c(0, 60),<br />
main="Drug A vs. Drug B",<br />
xlab="Drug Dosage", ylab="Drug Response")<br />
lines(dose, drugB, type="b",<br />
pch=17, lty=2, col="blue")<br />
abline(h=c(30), lwd=1.5, lty=2, col="gray")<br />
library(Hmisc)<br />
minor.tick(nx=3, ny=3, tick.ratio=.5)<br />
legend("topleft", inset=.05, title="Drug Type", c("A", "B"),<br />
lty=c(1,2), pch=c(15,17), col=c("red", "blue"), horiz=TRUE, cex=0.5)<br />
# legend(20, 61, title="Drug Type", c("A", "B"),<br />
# lty=c(1,2), pch=c(15,17), col=c("red", "blue"))<br />
par(opar)</p>
<p>attach(mtcars)<br />
plot(wt, mpg,<br />
main="Mileage vs. Car Weight",<br />
xlab="Weight", ylab="Mileage",<br />
pch=18, col="blue")<br />
text(wt, mpg,<br />
row.names(mtcars),<br />
cex=0.6, pos=4, col="red")<br />
detach(mtcars)</p>
<p>opar <- par(no.readonly=TRUE)<br />
par(cex=1.5)<br />
plot(1:7, 1:7, type="n")<br />
text(3,3,"默认文本的示例")<br />
text(4,4,family="mono", "默认文本的示例")<br />
text(5,5,family="serif","默认文本的示例")<br />
par(opar)</p>
<p>opar <- par(no.readonly=TRUE)<br />
par(cex=1.5)<br />
plot(1:7, 1:7, type="n")<br />
text(3,3,"1234567890")<br />
text(4,4,family="mono", "1234567890")<br />
text(5,5,family="serif","1234567890")<br />
par(opar)</p>
<p># demo(plotmath)</p>
<p># 3.5 图形的组合<br />
# -----------------------------------------------------------------------------<br />
attach(mtcars)<br />
opar <- par(no.readonly=TRUE)<br />
par(mfrow=c(2,2))<br />
plot(wt, mpg, main="散点图 wt vs. mpg")<br />
plot(wt, disp, main="散点图 wt vs. disp")<br />
hist(wt, main="Histogram of wt")<br />
boxplot(wt, main="Boxplot of wt")<br />
par(opar)<br />
detach(mtcars)</p>
<p>attach(mtcars)<br />
opar <- par(no.readonly=TRUE)<br />
par(mfrow=c(3,1))<br />
hist(wt)<br />
hist(mpg)<br />
hist(disp)<br />
par(opar)<br />
detach(mtcars)</p>
<p>attach(mtcars)<br />
layout(matrix(c(1,1,2,3), 2, 2, byrow=TRUE))<br />
hist(wt)<br />
hist(mpg)<br />
hist(disp)<br />
detach(mtcars)</p>
<p>attach(mtcars)<br />
layout(matrix(c(1,1,2,3), 2, 2, byrow=TRUE),<br />
widths=c(3,1), heights=c(1,2))<br />
# 第1行图形的高度是第2行中图形高度的三分之一<br />
# heights各行高度值组成的向量<br />
# 右下角图形的宽度是左下角图形宽度的四分之一<br />
# 有些不明白这个比例是怎么计算的?<br />
hist(wt)<br />
hist(mpg)<br />
hist(disp)<br />
detach(mtcars)</p>
<p># 图形布局的精细控制<br />
# 代码清单3-4 多幅图形布局的精细控制<br />
attach(mtcars)<br />
opar <- par(no.readonly=TRUE)<br />
par(fig=c(0, 0.8, 0, 0.8))<br />
plot(wt, mpg,<br />
xlab="Miles Per Gallon",<br />
ylab="Car Weight")<br />
par(fig=c(0, 0.8, 0.55, 1), new=TRUE)<br />
boxplot(wt, horizontal=TRUE, axes=FALSE)<br />
par(fig=c(0.65, 1, 0, 0.8), new=TRUE)<br />
boxplot(mpg, axes=FALSE)<br />
mtext("加强型散点图", side=3, outer=TRUE, line=-3)<br />
par(opar)<br />
</p>