《R语言实战》学习记录:图形初阶

时间:2018-08-13(学习) 2018-08-05(记录)
教程:《R语言实战》
学习内容:第三章


R语言实战

第三章:图形初阶

1. dev函数
> x11()   # 打开一个图形设备/图形窗口
> plot(2:4)   # 第一个窗口的内容
> x11()
> plot(1:10)   # 第二个窗口的内容
> x11()
> plot(rnorm(10))   #第三个窗口的内容
> dev.set(dev.prev())   # 打开当前图形窗口的前一个图形窗口
windows 
      3 
> abline(0, 1)   # through the 1:10 points
# 在当前图形窗口(第三个图形窗口)的前一个窗口(第二个窗口)上添加了一条线
> dev.set(dev.next())   # 打开当前图形窗口的下一个图形窗口
windows 
      4 
> abline(h = 0, col = "gray")   # for the residual plot
# 在当前图形窗口(第二个图形窗口)的下一个窗口(第三个窗口)上添加了一条灰色的过原点的水平线
> dev.set(dev.prev())
windows 
      3 
> dev.set(dev.prev())
windows 
      2 
> title("First")
# 在当前图形窗口(第三个图形窗口)的下下一个图形窗口(第一个图形窗口)上添加了标题“First”
> dev.off(); dev.off(); dev.off() #- close the three X devices
windows 
      3 
windows 
      4 
null device 
          1
2. 图形参数

生成本章练习所用数据:

> dose <- c(20, 30, 40, 45, 60)
> drugA <- c(16, 20, 27, 40, 60)
> drugB <- c(15, 18, 25, 31, 40)

使用par函数可以设置图形参数。
格式:*par(optionname = *value, optionname = name,…)
par():生成一个含有当前图形参数设置的列表。
par(no.readonly = TRUE):生成一个可以修改的当前图形参数列表。
使用plot函数进行绘图,该函数内指定的图形参数仅对生成的图形本身有效。
eg:

> plot(dose, drugA, type = "b")
> opar <- par(no.readonly = TRUE) # 复制了当前的图形参数设置
> par(lty = 2, pch = 17)  # 设置线类型为2,点类型为17
> plot(dose, drugA, type = "b")
> par(opar) # 修改回默认的图形参数设置
# 指定绘图类型为b,点类型为2,线类型为10
> plot(dose, drugA, type = "b", lty = 2, pch = 10)
# 在上图的基础上,加上了线宽为默认宽度的2倍(lwd = 2),点的大小为默认大小的4倍(cex = 4)
> plot(dose, drugA, type = "b", lty = 2, lwd = 2, pch = 10, cex = 4)

下图左上、左下、右上、右下分别为上述代码生成的1-4幅图。
这里写图片描述

type 内容
p
l 线
b 点和线(不连续)
c 不连续的线(在点处断开),相当于”b”去掉点
o 线穿过点
h 变量以点所在位置向x轴的垂直线的形式表示
s 阶梯形1
S 阶梯形2
n 没有图

这里写图片描述
这里写图片描述

使用plot绘图可以选择绘图的颜色。
eg:

> 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) 

这里写图片描述
R中颜色可以使用颜色对应的R中的名称RGB参数和颜色的16进制名称等来进行设置。

R中可以对字体进行设置。
- cex:相对于默认大小缩放倍数的数值
(参数cex.axis/ cex.lab/ cex.main/ cex.sub分别对坐标轴、标签、主标题和副标题的字体大小进行设置。)
- **font:**1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体
(参数font.axis/ font.lab/ font.main/ font.sub分别对坐标轴、标签、主标题和副标题的字体样式进行设置。)
- ps:字体磅值(文本的最终大小为 ps*cex)
- **family:**serif(衬线)/ sans(无衬线)/ mono(等宽)

Windows系统中:
- mono(等宽):TTCourier New
- serif(衬线):TT Times New Roman
- sans(无衬线):TT Arial
- 创建新的字体映射,windows系统使用函数windowsFonts(),Mac上为quartzFonts()。
eg:

> windowsFonts(
+   A = windowsFont("Arial Black"), 
+   B = windowsFont("Bookman Old Style")
+ )

使用pin函数、mai函数和mar函数对图形的大小及边界进行性设置。
格式:pin = c(width, height):尺寸(英寸)
mai = c(下,左,上,右):边界(英寸)
mar = c(下,左,上,右):边界(英分)

eg:

> par(pin = c(2, 3))   # 宽为2英寸,高为3英寸
> par(lwd = 2, cex = 1.5)   # 线宽为2倍,符号(点)大小为1.5倍
> par(cex.axis = .75, font.axis = 3)   # 坐标轴字体大小为0.75倍,斜体
> plot(dose, drugA, type = "b", pch = 19, lty = 2, col = mycolors, fg = "yellow")  # 参数fg设置前景色为黄色

这里写图片描述

> plot(dose, drugB, type = "b", pch = 23, lty = 6, col = "blue", bg = "green")   # 参数bg设置背景色为绿色

这里写图片描述

在plot函数中添加参数main、sub、xlab和ylab可以为图形添加主标题,副标题以及x、y坐标轴的标签,参数xlim和ylim设置坐标轴范围。
eg:

> plot(dose, drugA, 
+       main = "Clinical Trials for Drug A", 
+      sub = "This is hypothetical data", 
+      xlab = "Dosage", ylab = "Drug Response")

这里写图片描述

> plot(dose, drugA, type = "b", 
+      col = "blue", lty = 2, pch = 2, lwd =.5, 
+      font.main = 2, font.sub = 3, family = "serif",
+      cex.axis = .7,  cex.lab = .7, 
+      main = "Clinical Trials for Drug A", 
+      sub = "This is hypothetical data", 
+      xlab = "Dosage", ylab = "Drug Response", 
+      xlim = c(10, 60), ylim = c(0,70))

这里写图片描述

3. 标题、坐标轴的添加

标题除了可以在plot函数中添加参数生成以外,还可以通过title函数为当前图形添加标题。
格式:title(main = “main-title”, sub = “sub-title”, xlab = “x-axis label”, ylab = “y-axis label”)

title() 中可指定其他图形参数,如cex、col等。

与标题类似,坐标轴也可以使用axis函数在生成图形后进行设置,axis函数一次仅生成一条坐标轴。
格式:axis(side, at = ,labels = ,pos = ,lty = , col = , las = ,tck = , …)
其中:
- side:在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
- at:需要绘制刻度线的位置
- labels:刻度线旁边的文字标签
- pos:与另一条坐标轴相交位置的值
- las = 0:坐标轴标签平行于坐标轴
- las = 2:坐标轴标签垂直于坐标轴
- tck = 刻度线的长度(相对于绘图区域大小的分数,默认值为0.01)
当tck > 0时在图形内侧, tck < 0:在图形外侧;当tck = 0时禁用刻度,当tck = 1时绘制网格线。
创建自定义坐标轴时,应当禁用高级绘图函数自动生成的坐标轴。
- 参数 axes=FALSE 将禁用全部坐标轴(添加参数frame.plot=TRUE时不禁用坐标轴框架线)。
- 参数 xaxt=”n” 和yaxt=”n” 分别禁用X轴或Y轴(会留下框架线,只是去除了刻度)。
eg:

> x <- 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)
> axis(4, at = z, labels = round(z, digits = 2), 
+      col.axis = "blue", las = 2, cex.axis = .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)

这里写图片描述
plot函数中参ann:默认为TRUE。如果ann=FALSE,则生成图像不含任何名称。

4.次要刻度线和图例的添加

生成图像坐标轴除了含有主刻度线外,还可以使用Hmics包中的minor.tick函数为图像添加次要刻度线。
格式:minor.tick(nx = n, ny = y, tick.ratio = n)
其中,nx=n:将x轴的一格划分为n格;ny=m:将y轴的一格划分为m格;tick.ratio:次要刻度线相对于主刻度线的大小比例(长度相对于主刻度线的比例)。
par(“tck”):查看当前的主刻度线长度

使用abline函数为图像添加参考线。
格式:abline(h = yvalues, v = xvalues)

使用legend函数为图像添加图例(即图中各线条、符号所表示的数据内容)。
格式:legend(location, title, legend, …)
eg:

> par(opar)
> par(lwd = 2, cex = 1, 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, col = "blue", lty =2)
> abline(h = c(30), lwd = 1.5, lty = 2, col = "gray")
> library(Hmisc)
> minor.tick(nx = 2, ny = 2, tick.ratio = 0.5, x.args = list(lwd = .5, col = "gray"))
> legend("topleft", title = "Drug Type",
+        c("A","B"), lty = c(1,2), pch = c(15,17),
+        col = c("red","blue"), inset = .05)
> par(opar)

这里写图片描述

5.添加文本

使用text函数可以向绘图区域内部添加文本。可通过指定参数locationlocator(1)使用鼠标交互式地确定摆放位置
格式:text(location, “text to place”, pos, …)

使用mtext函数可以向图形的四个边界之一添加文本。
格式:mtext(“text to place”, side, line = n, …)

eg:

> 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 = .6, col = "red",
+      pos = 4, offset = .5)
> detach(mtcars)

这里写图片描述

> par(opar)
> par(cex = 1.5)
> plot(1:7, 1:7, type = "n")
> text(3,3, "default")
> text(4,4, family = "mono", "mono-spaced")
> text(5,5, family = "serif", "serif")

这里写图片描述

6.图形组合

通过更改par中参数mfrow或使用layout函数,可以对多个图像进行组合。
eg:

> with(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)
+   }
+ )

这里写图片描述

使用layout函数可以指定了所要组合的多个图形的所在位置。让图形的组合更为灵活。
eg:

> with(mtcars, {
+   layout(matrix(c(1,2,3,3), 2, 2, byrow = TRUE))
+   hist(wt)
+   hist(mpg)
+   hist(disp)
+   }
+ )

这里写图片描述

在layout函数中添加参数widthsheights,可以更精确地控制每幅图形的大小。参数widths控制每个图像之间宽度比例,参数heights控制每个图像之间高度比例。
eg:

> with(mtcars, {
+   layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE),
+          widths = c(3,1), heights = c(1,1.5))
+   hist(wt)
+   hist(mpg)
+   hist(disp)
+   })

这里写图片描述

使用图形参数fig可以对图形进行更精细的控制。一个图像中左下角为0点,右上角为1,fig函数设置接下来要生成的图像在整个图形中所占的比例,该参数内容为长度为4的向量,前两个值设置宽度,后两个值设置长度。

eg:

> with(mtcars, {
+   opar <- par(no.readonly = TRUE)
+   par(fig = c(0, 0.85, 0, 0.85))
+   plot(wt, mpg, xlab = "Miles Per Gallon", ylab = "Car Weight")
+   par(fig = c(0, 0.8, 0.5, 1), new = TRUE)
+   boxplot(wt, horizontal = TRUE, axes = FALSE)
+   par(fig = c(0.6, 1, 0, 0.8), new = TRUE)
+   boxplot(mpg, axes = FALSE)
+   mtext("Enhanced Scatterplot", side = 3, outer = TRUE, line = -3)
+   par(opar)
+   })

这里写图片描述
为了让图形更为紧凑,第二个图形的长度为0.5-1,而不是0.85-1,相应的,第三个图的宽度为0.6-1,而不是0.85-1。

猜你喜欢

转载自blog.csdn.net/woooooood/article/details/81910020
今日推荐