R 语言强大的可视化功能在科学研究中非常受欢迎,丰富的类库使得 R 语言可以绘制各种各样的图表。当然这些与本章内容毫无关系,因为笔者对绘制图表了解有限,仅限于能用的程度。接下来的内容无需额外安装任何包,仅使用 R 语言自带的绘图工具完成柱状图与折线图的绘制。如果对绘制的图表定制性要求较高,请搜索 ggplot2 包的相关教程。

柱状图

R 语言中使用 barplot() 函数来创建柱状图,下面绘制一个最简单的柱状图:

> data1 <- c(0.7795875, 0.8686484, 0.8901365, 0.905844, 0.9201746, 0.9227028)
> barplot(data1)

为了使图表的可读性更高,还需要添加标题、x 与 y 轴的副标题:

> xArgs <- c("1%", "2%", "3%", "4%", "5%", "6%")
> barplot(data1, main = "Plot Title", names.arg = xArgs, xlab = "X-axis Subtitle", ylab = "Y-axis Subtitle")

现在需要为现有的柱状图添加一组对比数据,并且灰色有些单调,还需要为柱状图添加一些鲜艳的颜色:

> data2 <- c(0.7921935, 0.8775983, 0.8999872, 0.9109487, 0.9250147, 0.9274716)  # 第二组数据
> colors <- rainbow(2, 0.6, 0.9) # 生成2个彩虹中的颜色并设置一下饱和度
> barplot(rbind(data1, data2), main = "Plot Title", names.arg = xArgs, xlab = "X-axis Subtitle", ylab = "Y-axis Subtitle", beside = TRUE, col = colors)

现在的柱状图变得稍微美观了一些,但两组数据的对比似乎还缺少图例:

> legends <- c("Data1", "Data2")
> b <- barplot(rbind(data1, data2), main = "Plot Title", names.arg = xArgs, xlab = "X-axis Subtitle", ylab = "Y-axis Subtitle", beside = TRUE, col = colors)
> legend("bottom", legend = legends, fill = colors, horiz = TRUE, bg = "white") # 图例

这个柱状图仍然有些不太满意,需要限制一下 y 轴的范围在 [0.75, 1],还要为柱状图添加数字显示,如果能加上网格就更好了:

> b <- barplot(rbind(data1, data2), main = "Plot Title", names.arg = xArgs, xlab = "X-axis Subtitle", ylab = "Y-axis Subtitle", beside = TRUE, col = colors, ylim = c(0.75, 1), xpd = FALSE)
> legend("bottom", legend = legends, fill = colors, horiz = TRUE, bg = "white") # 图例
> text(b, y = rbind(data1, data2) + 0.01, labels = as.character(round(rbind(data1, data2), 3)), cex = 0.75) # 柱状图文字描述
> grid(nx = 0, ny = 5, col = "lightgray") # 网格

“你是来找茬的吧!”,将柱状图改成虚线填充:

> angles <- c(60, 120)  # 虚线填充的角度
> b <- barplot(rbind(data1, data2), main = "Plot Title", names.arg = xArgs, xlab = "X-axis Subtitle", ylab = "Y-axis Subtitle", beside = TRUE, col = colors, ylim = c(0.75, 1), xpd = FALSE, angle = angles, density = 15)
> # 上文出现过的代码此处省略...

这样一个不能说是最好看的,但一定是一个功能最全的柱状图就完成了,请根据需求自由组合柱状图的外观。

折线图

此处折线图就不像柱状图一样一步步画了,图表的外观是通用的,柱状图中提到的外观都可以直接拿来给折线图用。下面绘制一个两条线的折线图:

> data1 <- c(0.8457699, 0.9294758, 0.9550087, 0.9640443, 0.969838, 0.9750423)
> data2 <- c(0.7892351, 0.8938469, 0.9202865, 0.9603516, 0.9590848, 0.9745516) # 两组数据
> xArgs <- c("1%", "2%", "3%", "4%", "5%", "6%") # x 轴
> legends <- c("Data1", "Data2") # 图例
> colors <- rainbow(2, 0.6, 0.9) # 颜色
> ltys <- c(1, 2) # 线条类型
> pchs <- c(12, 13) # 点的符号
> plot(data1, main = "Plot Title", xlab = "X-axis Subtitle", ylab = "Y-axis Subtitle",
col = colors[1], lty = ltys[1], pch = pchs[1], cex = 1.2, lwd = 2, type = "o", ylim = c(0.75, 1), xaxt = "n")
> axis(1, at = 1:6, labels = xArgs) # x 轴
> lines(data2, type="b", cex = 1.2, lwd = 2, lty = ltys[2], col = colors[2], pch = pchs[2]) # 添加第二条线
> legend("bottomright", legend = legends, col = colors, pch = pchs, horiz = FALSE) # 图例

线条类型和点的符号见下图:

下面绘制一个双 y 轴的折线图:

> data1 <- c(1, 0.93, 0.87, 0.82, 0.87, 0.98)
> data2 <- c(14.3736, 14.5011, 12.9268, 11.4347, 10.0557, 8.6953)
> xArgs <- c("1%", "2%", "3%", "4%", "5%", "6%")
> par(mar = c(5, 5, 4, 5)) # 设置图表的外边距,以便有足够的空间显示副标题
> plot(data1, main = "Plot Title", xlab = "X-axis Subtitle", ylab = "Y1-axis Subtitle", type = "o", col = "blue", pch = 15, axes = FALSE) # 绘制第一条线
> axis(side = 2) # 绘制第一条 y 轴
> axis(1, at = 1:6, labels = xArgs, cex.axis = 0.9) # 绘制 x 轴
> par(new = TRUE)
> plot(data2, type = "o", xaxt = "n", yaxt = "n", ylab = "", xlab = "", col = "red", lty = 2, pch = 16, axes = FALSE) # 绘制第二条线
> axis(side = 4)
> mtext("Y2-axis Subtitle", side = 4, line = 3) # 绘制第二条 y 轴
> box() # 将图表封闭

保存绘制的图表

保存为 pdf 文件:

pdf(file = "plot.pdf")
plot() # 此处绘图
dev.off()

保存为 png 文件:

png(file = "plot.png")
plot() # 此处绘图
dev.off()

最新文章

  1. 五个典型的 JavaScript 面试题
  2. 终于找到全annotation配置springMVC的方法了(事务不失效)
  3. openerp学习笔记 context 的应用
  4. Linux 内存管理子系统
  5. List&lt;&gt;.Contains&lt;&gt;的用法
  6. CMDeviceMotion使用
  7. 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?
  8. js原生设计模式——10适配器模式之参数适配器
  9. OA办公系统功能真的越全越好?
  10. [EasyUI]确认删除
  11. Quartz错过任务执行时间的处理机制(Misfire处理规则 )
  12. TCP/IP指纹鉴别 fingerprint
  13. PHP递归函数
  14. vue+iview实现一行平均五列布局
  15. js 中引用类型 的深拷贝 和 浅拷贝的区别
  16. composer安装与应用
  17. css实现图片横向排列滚动
  18. rsync- sersync -inotify
  19. IDEA 配置Junit4
  20. [JZOJ5425]数论

热门文章

  1. mysql编译报错
  2. DB2给表批量赋权
  3. Vue - 问题集、知识点
  4. 新增访客数量MR统计之NewInstallUserMapper相关准备
  5. 灵雀云Kube-OVN:基于OVN的开源Kubernetes网络实践
  6. LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]
  7. 返回值String是文本数据
  8. 集合框架-Map集合练习-记录字母次数思路及代码
  9. Linux下安装confluence汉化破解版
  10. /etc/crontab和crontab -e的区别