欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-22 23:24:04
...

时间: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幅图。
《R语言实战》学习记录:图形初阶

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

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

使用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中颜色可以使用颜色对应的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设置前景色为黄色

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

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

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

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

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

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

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

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)

《R语言实战》学习记录:图形初阶
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)

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

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)

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

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

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

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

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

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

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

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

在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)
+   })

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

使用图形参数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)
+   })

《R语言实战》学习记录:图形初阶
为了让图形更为紧凑,第二个图形的长度为0.5-1,而不是0.85-1,相应的,第三个图的宽度为0.6-1,而不是0.85-1。

相关标签: R语言