# 3.1 实用图形
# 绑定数据框mtcars
attach(mtcars)
# 打开了一个图形窗口并生成了一幅散点图,横轴表示车身重量,纵轴为每加仑汽油行驶的英里数
plot(wt, mpg)
# 向图形添加了一条最优拟合曲线
abline(lm(mpg~wt))
# 添加 了标题
title("Regression of MPG on Weight")
# 为数据框解除了绑定
detach(mtcars)getwd()
setwd("/Users/moxingjian/Learn/R/test")
# 保存到pdf中
pdf("test.pdf")attach(mtcars)plot(wt, mpg)abline(lm(mpg~wt))title("Regression of MPG on Weight")detach(mtcars)
dev.off()# 3.2 一个简单的例子
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
# type="b"表示同时绘制点和线
plot(dose, drugA, type = "b")# 3.3 图形参数
# (修改图形参数的)一种方法是通过函数par()来指定这些选项。以这种方式设定的参数值除非被再次修改,否则将在会话结束前一直有效
# 更改当前变量环境
opar <- par(no.readonly = TRUE)
# 将默认的线条类型修改为虚线(lty=2)并将默认的点符号改为了实心三角(pch=17)
par(lty = 2, pch = 17)
plot(dose, drugA, type = "b")
# 还原了原始设置
par(opar)
# 设置参数
plot(dose, drugB, type = "b", lty = 2, pch = 17)# 3.3.1 符号和线条
# pch:指定绘制点时使用的符号,有0~25种符号,对于符号21~25,还可以指定边界颜色(col=)和填充色(bg=)。
# cex:指定符号的大小。cex是一个数值,表示绘图符号相对于默认大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%,等等
# lty:指定线条类型
# lwd:指定线条宽度。lwd是以默认值的相对大小来表示的(默认值为1)。例如,lwd=2将生成一条两倍于默认宽度的线条
# 实战
plot(dose, drugA, type = "b", pch = 22, col = "red", bg = "black", cex = 2, lty = 3, lwd = 2)# 3.3.2 颜色
# col:默认的绘图颜色。某些函数(如lines和pie)可以接受一个含有颜色值的向量 并自动循环使用。例如,如果设定col=c("red", "blue")并需要绘制三条线, 则第一条线将为红色,第二条线为蓝色,第三条线又将为红色
# col.axis:坐标轴刻度文字的颜色
# col.lab:坐标轴标签(名称)的颜色
# col.main:标题颜色
# col.sub 副标题颜色
# fg:图形的前景色
# bg:图形的背景色n <- 10
# rainbow(10)可以生成10种连续的“彩虹型”颜色
mycolors <- rainbow(n)
# 画出来
pie(rep(1, n), labels = mycolors, col = mycolors)
# 多阶灰度 色可使用gray()函数生成。这时要通过一个元素值为0和1之间的向量来指定各颜色的灰度。 gray(0:10/10)将生成10阶灰度色
mygrays <- gray(0:n/n)
pie(rep(1, n), labels = mygrays, col = mygrays)# 3.3.3 文本属性
# 用于指定文本大小的参数
# cex:表示相对于默认大小缩放倍数的数值。默认大小为1,1.5表示放大为默认值的1.5 15 倍,0.5表示缩小为默认值的50%,等等
# cex.axis:坐标轴刻度文字的缩放倍数。类似于cex
# cex.lab:坐标轴标签(名称)的缩放倍数。类似于cex
# cex.main:标题的缩放倍数。类似于cex
# cex.sub:副标题的缩放倍数。类似于cex# 用于指定字体族、字号和字样的参数
# font:整数。用于指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe符号编码表示)
# font.axis:坐标轴刻度文字的字体样式
# font.lab:坐标轴标签(名称)的字体样式
# font.main:标题的字体样式
# font.sub:副标题的字体样式
# ps:字体磅值(1磅约为1/72英寸)。文本的最终大小为 ps*cex
# family:绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono (等宽)# 举例,在执行以下语句之后创建的所有图形都将拥有斜体、1.5倍于默认文本大小的坐标轴标签(名称),以及粗斜体、2倍于默认文本大小的标题。
par(font.lab = 3, cex.lab = 1.5, font.main = 4, cex.main = 2)quartzFonts("mono")
quartzFonts(sans = quartzFont(rep("AppleGothic", 4)),serif = quartzFont(rep("AppleMyungjp", 4)))
# 找出你的系统中有哪些字体是可用的
names(pdfFonts())
# 使用字体
pdf(file = "myplot.pdf", family = "serif")
# PostScript
names(postscriptFonts())
postscript(file = "myplot.ps", family = "Korea1")# 3.3.4 图形尺寸与边界尺寸
# 用于控制图形尺寸和边界大小的参数
# pin:以英寸表示的图形尺寸(宽和高)
# mai:以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸
# mar:以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分*。默认值为c(5, 4, 4, 2) + 0.1# 可生成一幅4英寸宽、3英寸高、上下边界为1英寸、左边界为0.5英寸、右边界为0.2英寸的图形
par(pin = c(4, 3), mai = c(1, .5, 1, .2))# 代码清单3-1 使用图形参数控制图形外观
opar <- par(no.readonly = TRUE)
# 得到的图形将为2英寸宽、3英寸高。
par(pin = c(2, 3))
# 除此之 外,线条的宽度将为默认宽度的两倍,符号将为默认大小的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)# 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()中亦可指定其他图形参数(如文本大小、字体、旋转角度和颜色)。
# 举例来说,以下代码将生成红色的标题和蓝色的副标题,以及较默认大小小25%的绿色x轴、y轴标签:
title(main = "My Title", col.main = "red",sub = "My Sub-title", col.sub = "blue",xlab = "My X label", ylab = "My Y label",col.lab = "green", cex.lab = 0.75)# 3.4.2 坐标轴
# 坐标轴选项
# side:一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
# at:一个数值型向量,表示需要绘制刻度线的位置
# labels:一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则将直接使用at中的值)
# pos:坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
# lty:线条类型
# col:线条和刻度线颜色
# las:标签是否平行于(=0)或垂直于(=2)坐标轴
# tck:刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0表示禁用刻度,1表示绘制网格线);默认值为0.01# 创建自定义坐标轴时,你应当禁用高级绘图函数自动生成的坐标轴。参数axes=FALSE将禁 用全部坐标轴(包括坐标轴框架线,除非你添加了参数frame.plot=TRUE)。参数xaxt="n"和 yaxt="n"将分别禁用X轴或Y轴(会留下框架线,只是去除了刻度)。
# 代码清单3-2 自定义坐标轴的示例
# 生成数据
x <- c(1:10)
y <- x
z <- 10/x
# 更改当前变量环境
opar <- par(no.readonly = TRUE)
# 增加边界大小
par(mar = c(5, 4, 4, 8) + 0.1)
# 绘制x对y的图形
plot(x, y, type = "b",pch = 21, col = "red",yaxt = "n", lty = 3, ann = FALSE)
# 添加x对1/x的直线
lines(x, z, type = "b", pch = 22, col ="blue", lty = 2)
# 绘制自己的坐标轴
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 = -.01)
# 添加标题和文本
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)# 次要刻度线
install.packages("Hmisc")
library(Hmisc)
# 格式
# 其中nx和ny分别指定了X轴和Y轴每两条主刻度线之间通过次要刻度线划分 得到的区间个数。tick.ratio表示次要刻度线相对于主刻度线的大小比例。当前的主刻度线长 度可以使用par("tck")获取
# minor.tick(nx = n, ny = n, tick.ratio = n)
# 下列语句将在X轴的每两条主刻度线之间添加1条次要刻度线,并在Y轴的每两条主刻度线之间添加2条次要刻度线
minor.tick(nx = 2, ny = 3, tick.ratio = 0.5)# 3.4.3 参考线
# 使用格式:abline(h = yvalues, v = xvalues)
# 在y为1、5、7的位置添加了水平实线
abline(h = c(1, 5, 7))
# 在x为1、3、5、7、9的位置添加了垂直的蓝色虚线
abline(v = seq(1, 10, 2), lty = 2, col = "blue")# 3.4.4 图例
# 使用格式为:lgend(location, title, legend, ...)
# 图例选项
# location:有许多方式可以指定图例的位置。你可以直接给定图例左上角的x、y坐标,也可以执行 locator(1),然后通过鼠标单击给出图例的位置,还可以使用关键字bottom、bottomleft、 left、topleft、top、topright、right、bottomright或center放置图例。如果你使用 了以上某个关键字,那么可以同时使用参数inset=指定图例向图形内侧移动的大小(以绘图区域大小的分数表示)
# title:图例标题的字符串(可选)
# legend:图例标签组成的字符型向量
# ...:其他选项。如果图例标示的是颜色不同的线条,需要指定col=加上颜色值组成的向量。如果图例 标示的是符号不同的点,则需指定pch=加上符号的代码组成的向量。如果图例标示的是不同的线 条宽度或线条类型,请使用lwd=或lty=加上宽度值或类型值组成的向量。要为图例创建颜色填 充的盒形(常见于条形图、箱线图或饼图),需要使用参数fill=加上颜色值组成的向量
#      其他常用的图例选项包括用于指定盒子样式的bty、指定背景色的bg、指定大小的cex,以 及指定文本颜色的text.col。指定horiz=TRUE将会水平放置图例,而不是垂直放置。# 代码清单3-3 依剂量对比药物A和药物B的响应情况
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()将文本添加到图形上。text()可向绘图区域内部添加文本,而mtext()则向图形的四个边界之一添加文本。
# 使用格式分别为:
# text(location, "text to place", pos, ...)
# mtext("text to place", side, line = n, ...)
# 函数text()和mtext()的选项
# location:文本的位置参数。可为一对x,y坐标,也可通过指定location为locator(1)使用鼠标交互式地确定摆放位置
# pos:文本相对于位置参数的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同时指定参数offset=作为偏移量,以相对于单个字符宽度的比例表示
# side:指定用来放置文本的边。1=下,2=左,3=上,4=右。你可以指定参数line=来内移或外移文本,随着值的增加,文本将外移。也可使用adj=0将文本向左下对齐,或使用adj=1右上对齐attach(mtcars)
plot(wt, mpg,main = "Mileage vs Car Weight",xlab = "Weight", ylab = "Mileage",pch = 18, col = "blue")
# 针对数据框mtcars提供的32种车型的车重和每加仑汽油行驶英里数绘制了散点图。 函数text()被用来在各个数据点右侧添加车辆型号。各点的标签大小被缩小了40%,颜色为红色。
text(wt, mpg,row.names(mtcars),cex = 0.6, pos = 4, col = "red")
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)# 数学标注
# 函数plotmath()可以为图形主体或边界上的标题、坐标轴名称或文本标注添加数学符号。
help("plotmath")
# 示例
x <- seq(-4, 4, len = 101)
y <- cbind(sin(x), cos(x))
matplot(x, y, type = "l", xaxt = "n",main = expression(paste(plain(sin) * phi, "  and  ",plain(cos) * phi)),ylab = expression("sin" * phi, "cos" * phi), # only 1st is takenxlab = expression(paste("Phase Angle ", phi)),col.main = "blue")
axis(1, at = c(-pi, -pi/2, 0, pi/2, pi),labels = expression(-pi, -pi/2, 0, pi/2, pi))# 3.5 图形的组件
# 在R中使用函数par()或layout()可以容易地组合多幅图形为一幅总括图形
# 可以在par()函数中使用图形参数mfrow=c(nrows, ncols)来创建按行填充的、行数为 nrows、列数为ncols的图形矩阵。另外,可以使用nfcol=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)# 第二个示例,3行1列排布3幅图形
attach(mtcars)
opar <- par(no.readonly = TRUE)
par(mfrow = c(3, 1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)# 函数layout()的调用形式为layout(mat),其中的mat是一个矩阵,它指定了所要组合的多个图形的所在位置。
# 在以下代码中,一幅图被置于第1行,另两幅图则被置于第2行:
attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
# 为了更精确地控制每幅图形的大小,可以有选择地在layout()函数中使用widths=和heights=两个参数。其形式为:
# widths = 各列宽度值组成的一个向量
# heights = 各行高度值组成的一个向量
# 相对宽度可以直接通过数值指定,绝对宽度(以厘米为单位)可以通过函数lcm()来指定。
# 在以下代码中,我们再次将一幅图形置于第1行,两幅图形置于第2行。但第1行中图形的 10 高度是第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)# 图形布局的精细控制
# 可能有很多时候,你想通过排布或叠加若干图形来创建单幅的、有意义的图形,这需要有对 图形布局的精细控制能力。你可以使用图形参数fig=完成这个任务。
# 代码清单3-4通过在散点图 上添加两幅箱线图,创建了单幅的增强型图形
# 要理解这幅图的绘制原理,请试想完整的绘图区域:左下角坐标为(0,0),而右上角坐标为 (1,1)。图3-19是一幅示意图。参数fig=的取值是一个形如c(x1, x2, y1, y2)的数值向量。
# 第一个fig=将散点图设定为占据横向范围0~0.8,纵向范围0~0.8。上方的箱线图横向占据0~0.8,纵向0.55~1。右侧的箱线图横向占据0.65~1,纵向0~0.8。fig=默认会新建一幅图形,所 以在添加一幅图到一幅现有图形上时,请设定参数new=TRUE。
# 我将参数选择为0.55而不是0.8,这样上方的图形就不会和散点图拉得太远。类似地,我选择 了参数0.65以拉近右侧箱线图和散点图的距离。你需要不断尝试找到合适的位置参数。
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)
# 在右上方添加箱图
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)

《R语言实战》第3章相关推荐

  1. AI - 深度学习之美十四章-概念摘要(8~14)

    原文链接:https://yq.aliyun.com/topic/111 本文是对原文内容中部分概念的摘取记录,可能有轻微改动,但不影响原文表达. 08 - BP算法双向传,链式求导最缠绵 反向传播( ...

  2. AI - 深度学习之美十四章-概念摘要(1~7)

    原文链接:https://yq.aliyun.com/topic/111 本文是对原文内容中部分概念的摘取记录,可能有轻微改动,但不影响原文表达. 01 - 一入侯门"深"似海,深 ...

  3. 【深度学习之美】卷地风来忽吹散,积得飘零美如画(入门系列之十)

    系列文章: 一入侯门"深"似海,深度学习深几许(深度学习入门系列之一) 人工"碳"索意犹尽,智能"硅"来未可知(深度学习入门系列之二) 神经 ...

  4. 【深度学习之美】激活引入非线性,池化预防过拟合(入门系列之十二)

    12.1 两个看似闲扯的问题 在开讲本章内容之前,先请你思考两个问题呗:第一个问题,你能用直线画出一张漂亮的笑脸吗?第二个问题是,你知道那副著名的对联:"诸葛一生唯谨慎,吕端大事不糊涂&qu ...

  5. 【深度学习之美】LSTM长短记,长序依赖可追忆(入门系列之十四)

    14.1 遗忘是件好事还是坏事? 如果我问你,遗忘,是件好事,还是坏事? 或许你会说,当然是件坏事啊,我可羡慕记忆力好的人了. 可我要告诉你,如果你到现在还记得,两岁时,隔壁家的小女孩"横刀 ...

  6. 【深度学习之美】BP算法双向传,链式求导最缠绵(入门系列之八)

    8.1 BP神经网络极简史 在神经网络(甚至深度学习)参数训练中,BP(Back Propagation)算法非常重要,它都占据举足轻重的地位.在提及BP算法时,我们常将它与杰弗里•辛顿(Geoffr ...

  7. 【深度学习之美】局部连接来减参,权值共享肩并肩(入门系列之十一)

    系列文章: 一入侯门"深"似海,深度学习深几许(深度学习入门系列之一) 人工"碳"索意犹尽,智能"硅"来未可知(深度学习入门系列之二) 神经 ...

  8. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  9. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  10. 一文让你完全弄懂回归问题、激活函数、梯度下降和神经元模型实战《繁凡的深度学习笔记》第 2 章 回归问题与神经元模型(DL笔记整理系列)

    <繁凡的深度学习笔记>第 2 章 回归问题与神经元模型(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net/ http ...

最新文章

  1. tensorflow神经网络拟合非线性函数与操作指南
  2. 深入探讨struts的ActionMessages消息机制(转)
  3. CmsEasy 漏洞挖掘
  4. 【Linux】crontab命令详解
  5. 精通Android开发 1
  6. 计算机在轻化工程中的应用,计算机在轻化工程专业中的应用-中国大学mooc-题库零氪...
  7. parseInt和valueOf
  8. Qt工作笔记-使用QFileSystemWatcher监控文件是否改变
  9. 0924html小测答案
  10. 【Maven】3.使用IntelliJ IDEA 使用本地搭建的maven私服,而不是使用默认的maven设置...
  11. android studio 修改文件后出现类型转换错误
  12. android比较两个字符串,关于java:两个字符串的比较在android中不起作用
  13. 一年多的远程办公带给我的感悟
  14. 如何获得一个干净的 gnome 开发环境?
  15. easyui获取图片路径_Python玩转图片九宫格
  16. Director 介绍
  17. 《炬丰科技-半导体工艺》衬底温度对ZnO薄膜的结构和光学特性的影响
  18. 视频编码中的PAFF和MBAFF的区别 转自:http://blog.csdn.net/kerryhung/article/details/4433256...
  19. 前端获取本地ip地址
  20. 创业有感-表达能力很关键

热门文章

  1. 基于区块链的健康链系统设计与实现(2)区块链平台Web服务器
  2. 现代密码学5.4--对哈希函数的攻击
  3. MySQL—不相关子查询(多行子查询)
  4. 『安全漏洞』Windows 云同步引擎API整数溢出漏洞
  5. 攻击面管理(ASM),企业攻击面管理实践指南
  6. Adobe Reader栈溢出漏洞(CVE-2010-2883)分析
  7. 1128 N Queens Puzzle (20 分)【难度: 一般 / 知识点: 模拟】
  8. 【PAT乙级】1069 微博转发抽奖 (20 分)
  9. 【PAT乙级】1040 有几个PAT (25 分)
  10. Shell中的for循环