前面已经用了六篇推文系统地介绍了R语言的基础绘图系统的主要函数用法,以及柱状图、直方图、箱形图、扇形图等常见图形的绘制方法,接下来将计划用四篇推文介绍使用基础绘图系统能够绘制的其他各类图形。

本篇介绍的是各类散点图或折线图,有以下6个函数,这些函数基本上相当于是plot函数某些功能的快捷方式:

  • dotchart()

  • stripchart()

  • sunflowerplot()

  • matplot()

  • pairs()

  • coplot()

dotchart()

此函数绘制的是克利夫兰点图(Cleveland Dot Plot):

dotchart(x, labels = NULL,groups = NULL, gdata = NULL,ann = par("ann"), xaxt = par("xaxt"),frame.plot = TRUE, log = "",cex = par("cex"), pt.cex = cex,pch = 21, gpch = 21, bg = par("bg"),color = par("fg"), gcolor = par("fg"), lcolor = "gray",xlim = range(x[is.finite(x)]),main = NULL, xlab = NULL, ylab = NULL, ...)
  • x为向量或矩阵。

克利夫兰点图是按列绘制各样本的属性散点图,并自动按大小进行排序。

VADeaths[,1:2]
##       Rural Male Rural Female
## 50-54       11.7          8.7
## 55-59       18.1         11.7
## 60-64       26.9         20.3
## 65-69       41.0         30.9
## 70-74       66.0         54.3dotchart(VADeaths[,1:2], bg = "skyblue")

  • 上图年龄组并不是按年龄大小排序(也就是行序)的,而是自动按点对应的属性值的大小进行排序。

stripchart()

该函数绘制的是一维散点图:

stripchart(x, method = "overplot",jitter = 0.1, offset = 1/3,vertical = FALSE, group.names,add = FALSE, at = NULL,xlim = NULL, ylim = NULL,ylab = NULL, xlab = NULL,dlab = "", glab = "",log = "", pch = 0, col = par("fg"),cex = par("cex"),axes = TRUE, frame.plot = axes, ...)

在绘制一维散点图时,可能会面临散点重叠的情况,该函数method参数提供了三种处理方式:overplot(默认值)、jitter、stack。

vertical参数控制绘制方向,默认值FALSE表示水平绘制。

stripchart(mtcars[, c("drat", "qsec", "wt")],vertical = T, main = "overplot",pch = 21, bg = "skyblue")
stripchart(mtcars[, c("drat", "qsec", "wt")],vertical = T, method = "jitter", main = "jitter",pch = 21, bg = "skyblue")
stripchart(mtcars[, c("drat", "qsec", "wt")],vertical = T, method = "stack", main = "stack",pch = 21, bg = "skyblue")

method = "overplot"

method = "jitter"

method = "stack"
  • jitter参数在method = "jitter"时起作用;

  • offset参数在method = "stack"时起作用。

x参数也可以是表达式的形式,并由data参数提供变量:

stripchart(mpg ~ cyl, data = mtcars,vertical = T, method = "jitter",pch = 21, bg = "skyblue")

sunflowerplot()

该函数在绘制散点图遇到重叠现象时,会采用花瓣的形式标明重叠点的个数(即花瓣的瓣数):

sunflowerplot(x, y = NULL, number,log = "", digits = 6,xlab = NULL, ylab = NULL,xlim = NULL, ylim = NULL,add = FALSE, rotate = FALSE,pch = 16, cex = 0.8, cex.fact = 1.5,col = par("col"), bg = NA,size = 1/8, seg.col = 2,seg.lwd = 1.5, ...)

rotate参数会随机旋转花瓣的方向。

seg.colseg.lwd参数控制花瓣线条的相关属性。

sunflowerplot(mtcars[, c("drat", "hp")],seg.col = "blue", rotate = TRUE)

该函数绘制散点图时同样可以使用表达式的形式:

sunflowerplot(hp ~ drat, data = mtcars,seg.col = "blue", rotate = TRUE)

number参数可以指定每个样本点实际代表的点个数(或重复的次数):

sunflowerplot(rnorm(100), rnorm(100),number = rpois(n = 100, lambda = 2),seg.col = "blue", rotate = TRUE)

matplot()

该函数使用矩阵的形式实现同时绘制多对散点图/折线图的功能:

matplot(x, y, type = "p", lty = 1:5,lwd = 1, lend = par("lend"),pch = NULL,col = 1:6, cex = NULL, bg = NA,xlab = NULL, ylab = NULL,xlim = NULL, ylim = NULL,log = "", ..., add = FALSE,verbose = getOption("verbose"))

下列代码中,自变量x只有一个序列,而因变量y有多个序列:

x <- seq(0,2,0.01)
y <- data.frame(a = log(x), b = x*exp(-1),c = x - 1)matplot(x, y, type = "l", pch = 1, lty = 1,col = c("red", "blue", "green"))

当参数xy的位置只有一个取值时,该函数将其视为因变量y,而将x视为c(1:n)

下列代码来自官方文档:

sines <- outer(1:20, 1:4, function(x, y) sin(x / 20 * pi * y))
head(sines)
##           [,1]      [,2]      [,3]          [,4]
## [1,] 0.1564345 0.3090170 0.4539905  5.877853e-01
## [2,] 0.3090170 0.5877853 0.8090170  9.510565e-01
## [3,] 0.4539905 0.8090170 0.9876883  9.510565e-01
## [4,] 0.5877853 0.9510565 0.9510565  5.877853e-01
## [5,] 0.7071068 1.0000000 0.7071068  1.224606e-16
## [6,] 0.8090170 0.9510565 0.3090170 -5.877853e-01matplot(sines, pch = 1:4, type = "o", col = rainbow(ncol(sines)))

type参数与plot函数的同名参数功能一致。由于该函数用于多序列数据绘图,type参数可以设置成组合字符的形式,如下列代码中,type = "plo"表示type参数在plo中进行循环赋值:

matplot(sines, pch = 1, type = "plo", col = rainbow(ncol(sines)))

matplot函数另外有两个快捷函数,分别相当于type参数取值为pl的情况:

  • matpoints()

  • matlines()

pairs()

该函数是plot.data.frame用法的进阶版:

pairs(x, labels, panel = points, ...,horInd = 1:nc, verInd = 1:nc,lower.panel = panel, upper.panel = panel,diag.panel = NULL, text.panel = textPanel,label.pos = 0.5 + has.diag/3, line.main = 3,cex.labels = NULL, font.labels = 1,row1attop = TRUE, gap = 1, log = "",horOdd = !row1attop, verOdd = !row1attop)

mtcars中提取三个变量进行绘图:

data <- mtcars[, c("drat", "qsec", "wt")]
pairs(data, pch = 21,bg = c("red", "blue", "green"))

或者使用表达式的形式:

pairs(~ drat + qsec + wt, data = mtcars, pch = 21,bg = c("red", "blue", "green"))

该函数有5个面板参数:

  • panel:全局面板参数;

  • lower.panel:下三角面板参数;

  • upper.panel:上三角面板参数;

  • diag.panel:对角面板参数;

  • text.panel:文本面板参数。

text.panel外,其余4个面板参数分别控制对应位置的图形样式,取值为合适的绘图函数名,如points表示散点图,lines表示折线图,此外还有面板平滑函数:

panel.smooth(x, y, col = par("col"), bg = NA,pch = par("pch"), cex = 1,col.smooth = "red", span = 2/3,iter = 3, ...)

也可以使用自定义函数:

panel.hist <- function(x, ...) {usr <- par("usr"); on.exit(par(usr))par(usr = c(usr[1:2], 0, 1.5) )h <- hist(x, plot = FALSE)breaks <- h$breaks; nB <- length(breaks)y <- h$counts; y <- y/max(y)rect(breaks[-nB], 0, breaks[-1], y,col = "grey", ...) }

当面板参数取值为NULL时表示对应位置为空白。

示例如下:

pairs(data, pch = 21,panel = panel.smooth, # 全局使用平滑函数upper.panel = NULL, # 去除上三角diag.panel = panel.hist, # 对角绘制直方图bg = c("red", "blue", "green"))

coplot()

该函数绘制条件散点图(Conditioning Plots):

coplot(formula, data,given.values, panel = points,rows, columns,show.given = TRUE,col = par("fg"), pch = par("pch"),bar.bg = c(num = gray(0.8), fac = gray(0.95)),xlab = c(x.name, paste("Given :", a.name)),ylab = c(y.name, paste("Given :", b.name)),subscripts = FALSE,axlabels = function(f) abbreviate(levels(f)),number = 6, overlap = 0.5, xlim, ylim, ...)

下列代码绘制cyl变量(即条件变量Given)在不同取值下,变量drat与mpg之间的散点图:

coplot(mpg ~ drat | cyl, data = mtcars)

  • 条件变量不需要是因子变量,number参数控制将条件变量分成的组数,默认为6。

co.intervals函数可以对条件变量进行区间划分,并赋值给coplot函数的given.values参数。

co.intervals函数的语法结构:

co.intervals(x, number = 6, overlap = 0.5)

示例:

given.v <- co.intervals(mtcars$qsec, number = 4)
coplot(mpg ~ drat | qsec, data = mtcars,given.values = given.v)

条件变量有两个时,使用符号*

coplot(mpg ~ drat | cyl*vs, data = mtcars)

graphics | 基础绘图系统(七)——各式各样的散点图/折线图相关推荐

  1. graphics | 基础绘图系统(八)——棘状图、符号图、多边形(路径)图、Cohen-Friendly关联图、条件密度图...

    本篇继续介绍基础绘图系统中的几个绘图函数. spineplot() 该函数用于绘制棘状图,有以下两种语法结构: spineplot(x, y = NULL,breaks = NULL, tol.yla ...

  2. graphics | 基础绘图系统(五)——plot函数功能再探和低级绘图函数

    plot函数虽然主要用于绘制散点图和折线图,但它实际上是一个比较全能的函数.本篇就介绍如何使用plot函数绘制其他类型的图形.另外,上篇介绍的高级绘图函数如boxplot.barplot等都有参数ad ...

  3. graphics | 基础绘图系统(一)——主函数plot及其参数

    R语言的基础绘图系统主要由基础包graphics提供,它包含了各式的图形绘制函数,如折线图.直方图.箱形图等.本篇主要介绍plot()函数的用法,它主要用于绘制散点图和折线图. plot()函数的语法 ...

  4. graphics | 基础绘图系统(九)——栅格图、点密度图、等高线(填充)图、三维图...

    先插播一则消息:刚建的交流群莫名其妙地被判违规,不仅无法加新人,而且群内的消息可能只能自己看到.先看看过几天能不能解封,不行再另想办法. 本篇是"基础绘图系统"系列的第九篇推文,也 ...

  5. graphics | 基础绘图系统(三)——添加文本标注、坐标轴线和图例

    前面介绍了使用使用高级绘图函数plot()绘制基本图形和使用参数函数par()美化要素.设置布局等.但有时为了表达更丰富的内容,我们还需要添加文本标注以及必要的图例,这些可以使用text().mtex ...

  6. graphics | 基础绘图系统的拼图方法之三:使用mfrow、mfcol参数和layout函数

    R的基础绘图功能是个自成体系的系统,尽管有许多工具包可以"一行代码绘制一幅图",但是小编仍然认为系统地学习基础功能非常重要. 本篇推文是为了补全关于基础绘图系统的拼图功能的介绍,前 ...

  7. graphics | 基础绘图系统(十)——星形图、四瓣图、马赛克图

    插播消息:最初建的交流群已经无法使用了,新建群的加入方式见次条推送. 本篇是"基础绘图系统"系列推文的最后一篇,我们来介绍三种不常见的图形,对应的绘图函数分别如下: stars() ...

  8. graphics | 基础绘图系统(四)——柱状图、直方图、扇形图、箱形图和函数图象...

    前面介绍的主函数plot()主要用于绘制散点图和折线图,绘制其他常见的图形如柱状图.直方图.扇形图和箱形图等可以调用专门的函数. 1 柱状图 绘制基础柱状图的函数是barplot(),其语法结构如下: ...

  9. echarts折线图y轴根据数值自动_R语言基础绘图教程——第3章:折线图和带状图...

    教程代码和文件,关注本公众号,后台回复:R语言基础绘图代码 R基础教程可先阅读:R语言编程基础第一篇:语法基础 利用plot()绘制 在上一章中我们讲过plot()绘图的基本结构,主要通过type参数 ...

最新文章

  1. utf8汉字编码16进制对照(转载)
  2. python基础教程:startswith()和endswith()的用法
  3. tl r402路由器设置_tplink wr847n无线路由器如何设置 tplink wr847n无线路由器设置方法【详解】...
  4. Android之奔溃提示com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap
  5. mysql数据库主从同步的原理_mysql数据库主从同步复制原理
  6. 【报告分享】中国创新生态发展报告2019-德勤.pdf
  7. UML序列图总结(转)
  8. xcode 9.0 iOS 11
  9. c++中的MFC可视化编程
  10. VS2010应用程序的打包与图标设置
  11. flutter TapBar自定义indicator、固定宽度、圆角、改变indicator和text的距离
  12. 99乘法表带颜色HTML隔行变色,javascript小实例,实现99乘法表及隔行变色
  13. mysql没开启binlog恢复数据_MySQL:binlog恢复数据
  14. Squid缓存服务器原理与实战演练
  15. python mysql实例_Python操作Mysql实例代码
  16. java如何保证mq一定被消费,RabbitMQ如何保证队列里的消息99.99%被消费?
  17. Web Caching(Web缓存)
  18. CISCO路由器基础配置及配置静态路由
  19. 服务器搭建SSH暴力攻击诱饵,制作密码字典
  20. labelme标签批量转换,labelme_json_to_dataset

热门文章

  1. 整合了一下网上的内容,excel工作簿全部公式转换为值
  2. Myeclipse学习总结(10)——MyEclipse2014导入项目时The project was not built since its build问题
  3. php文件下载不完整,求帮看下这段PHP下载MP4文件的有关问题,文件下载不完整
  4. ntp如何确认与服务器偏差_CDH集群时钟偏差问题
  5. LInux下centos6.7 设置字符集,解决乱码问题
  6. js 变量的声明能提升 初始化不会提升
  7. Java8-初识Lambda
  8. 企业管理器控制台本地无法访问
  9. Spring简单的文件配置
  10. 使用java api操作HDFS文件