在知乎上看到这么一个问题:rstudio将两个图放在同一坐标轴用什么函数?在这里回答一下。

小编推测提问者是想问“使用R语言绘图时怎么把不同的图形绘制在同一个坐标系中”。那么这个问题的本质上其实是进行图形叠加。在ggplot2工具包及其拓展包中,这个问题很好解决,因为几何图形函数通过符号"+"就能依次在同一坐标系下绘制相应的图形。本篇就来介绍基础绘图系统解决这一问题的思路。

之前,小编已经介绍了如何使用基础绘图系统的fig参数进行拼图。从下图可以看出,这三个子图明显不在同一坐标系,而是被“拼”在一起的。

想在同一坐标下进行组图,主要有两个思路:调用函数的add参数和使用低级绘图函数。下面小编依次进行介绍。

add参数

graphics工具包中,一般情况下,每使用一个绘图主函数,就会重新建立一个新的绘图页面;而当add参数被设置为TRUE时,则会使用已有的绘图页面和坐标系。

示例一

plot(mtcars$mpg, mtcars$qsec,pch = 21, bg = "skyblue",xlim = c(5, 35), ylim = c(12, 24), # 设置坐标范围xlab = "mpg", ylab = "qsec")
boxplot(mtcars$mpg, horizontal = T, at = 13,width = 2, notch = T, col = "coral",add = T) # 设置add参数
boxplot(mtcars$qsec, at = 7.5,width = 2, notch = T, col = "darkgreen",add = T) # 设置add参数

需要注意以下几点:

  • 第一个绘图主函数不需要设置add参数,但要设定合适的坐标范围,以涵盖后续图形的坐标范围;

  • 从第二个绘图主函数开始,均需设置add参数;

  • 设置add = TRUE的函数,其布局参数会自动失效,也就是说只有第一个绘图主函数能够对绘图布局要素如坐标范围、标签等进行调整。

需要注意的是,大部分绘图主函数都有add参数,但并非所有,具体可查看相应函数的帮助文档。

低级函数

当主函数没有add参数时,可以考虑使用低级函数。这里以plot函数为例。

plot函数根据xy参数的类型(数值向量/因子向量/矩阵)可绘制不同的图形。其中当xy参数均为数值向量时,绘制散点图和折线图,此时plot函数没有add参数。

因此,若想在已有坐标系中叠加散点图或折线图,不能使用plot(x, y, add = T)这种方式,而应使用对应的低级函数pointslines。低级函数只能在主函数之后使用,并继续使用主函数生成的绘图页面和坐标系。

示例二

plot(mtcars$mpg, mtcars$qsec,pch = 21, bg = "skyblue",xlim = c(5, 35), ylim = c(12, 24),xlab = "mpg", ylab = "qsec")
boxplot(mtcars$mpg, horizontal = T, at = 13,width = 2, notch = T, col = "coral",add = T)
boxplot(mtcars$qsec, at = 7.5,width = 2, notch = T, col = "darkgreen",add = T)
# 线性模型拟合
model <- lm(qsec ~ mpg, data = mtcars)
lines(mtcars$mpg, fitted(model),col = "red") # 添加拟合直线

双坐标轴

当两个图形的因变量的取值范围相差较大时,可以使用双坐标轴。严格来讲,双坐标轴不算是在同一坐标系下。

设置双坐标轴的思路如下:

  • 第一个绘图函数正常使用,第二个绘图函数前加上par(new = T)

  • 两个绘图函数的xlim参数设置保持一致;

  • 在第二个绘图函数中,通过设置ann = Faxes = F隐藏自动生成的坐标轴及其刻度;

  • 使用辅助函数axis在右侧生成次坐标轴及其刻度;

  • 使用辅助函数mtext在右侧添加次坐标轴名称标签;为了防止右侧页边距过小导致标签越出边界,可在绘图前修改par函数的plt参数。

示例三

par(plt = c(0.12, 0.88, 0.25, 0.90))
plot(mtcars$mpg, mtcars$qsec,pch = 21, bg = "skyblue",xlim = c(5, 35), ylim = c(12, 24),xlab = "mpg", ylab = "qsec")
par(new = T)
plot(mtcars$mpg, mtcars$wt,pch = 21, bg = "coral", xlim = c(5, 35),ann = F, axes = F)
axis(side = 4)
mtext("wt", side = 4, line = 3)
legend("topright", legend = c("qsec", "wt"),pch = 21, pt.bg = c("skyblue", "coral"))

相关阅读

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

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

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

  4. 技巧 | 如何使用R语言的基础绘图系统的拼图功能

知乎问答 | 如何在同一坐标系下绘制多幅图形相关推荐

  1. 已知同一组点在不同坐标系下的坐标,如何求解两个坐标系之间的转换关系

    问题描述: 已知同一组点在不同坐标系下的坐标(例如有点ABCDEF六个点在坐标系1下的坐标A1,B1,C1,D1,E1,F1同时又已知ABCDEF六个点在坐标系2下的坐标A2,B2,C2,D2,E2, ...

  2. 已知一个坐标系下某个点的坐标,求另一个坐标系下该点的坐标

    问题描述: 已知在odo坐标系下body点的坐标(x_body_in_odo,y_body_in_odo),和obj点的坐标(x_obj_in_odo,y_obj_in_odo), odo坐标系和bo ...

  3. 若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?

    知乎问答:做了两年前端开发,平时就是拿 Vue 写写页面和组件,简历的项目经历应该怎么写得好看? 以下是我的回答,阅读量5000+,所以发布到公众号申明原创. 题主说的2年经验做的东西没什么技术含量, ...

  4. 知乎问答:一年内的前端看不懂前端框架源码怎么办?

    知乎问答:一年内的前端看不懂前端框架源码怎么办?以下是我的回答,阅读量 1000+.现在转载到微信公众号中.链接:https://www.zhihu.com/question/350289336/an ...

  5. 将物体固定在坐标某个点_坐标变换(2)—不同坐标系下的变换

    如下图所示,在自动驾驶车辆上会存在大量冗余的传感器,例如轮速传感器.激光雷达,毫米波雷达,摄像头,超声波雷达,GPS,IMU等.不同传感器对同一物体的测量原始结果都是在自身坐标下,所以首先我们需要对多 ...

  6. python 切片_知乎问答之 Python 切片整理

    知乎问答之 Python 切片 这是一个知乎问答的补充.原问题是python中字符串 s[ : -1]是什么意思?,当时回答的内容只是对问题本身的简单回答,对 Python 切片中的重要信息是有所忽略 ...

  7. 自车坐标系下的物体相对和绝对位置和速度计算

    自车坐标系与绝对坐标系的速度位置换算原理 自车坐标系 坐标系--右-前-天坐标(RFU) 坐标系--前-左-上(FLU) 位置换算 速度换算 示意图 情形一 情形二 小结 参考 自车坐标系 自车坐标系 ...

  8. 无人驾驶路径规划(三)局部路径规划-Frenet坐标系下的动态轨迹规划

    前言:对于无人驾驶路径规划系列的第二篇RRT算法的改进部分,由于有些内容属于个人想到的创新点,有想法投一篇小论文所以暂时没有公开,等后续完成后我会再公开介绍.今天第三篇内容开启一个新的算法介绍:Fre ...

  9. 知乎问答推广怎么做,知乎问答营销技巧

    知乎问答推广怎么做?知乎问答营销技巧 首先我们一定要明白知乎账号现在比较少,所以想要通过知乎去做问答推广,前期必须先要养 一下账号.因为如果只是一个新号,一开始就直接去发布信息是很难发布成功的. 至于 ...

最新文章

  1. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题
  2. Coursera, Big Data 1, Introduction (week 3)
  3. ZOJ 1648 线段相交
  4. [渝粤教育] 西南科技大学 机械制造装备及工艺 在线考试复习资料
  5. C#基础加强_泛型的基本原理
  6. Windows Server 2008 将与 Visual Studio 2008 和 SQL Server 2008 于2008年2月27 日在洛杉矶共同发布...
  7. (转)美国进入智能投顾竞争时代
  8. 认证杯网络挑战赛C题破局共享汽车
  9. 人工智能资源下载2024G
  10. Windows如何后台运行bat文件
  11. 进一线互联网大厂担任架构师,需要掌握哪些核心技能?
  12. 避免使用ordinal方法
  13. Google Guava简介
  14. Ubuntu18.04 无法解析域名
  15. 头歌 6. Pandas合并数据集
  16. GNSS抗干扰和GNSS抗欺骗
  17. python文本热点问题挖掘_基于文本挖掘的网络热点舆情分析
  18. NBIOT 设备接入ONENET平台
  19. 台式计算机BIOS怎么查,怎么查看bios版本|查询电脑主板bios版本的方法
  20. JAVA 识别图片中二维码 opencv 识别精准

热门文章

  1. java mysql_num_rows_JAVA MYSQL sql_calc_found_rows和found_rows()实践
  2. elf 取路径_PatchELF 修改linux下elf文件library搜索路径
  3. pythonpandas分析数据_python 数据分析--pandas
  4. 韩国f4计算机考试在哪报名,2020年F4签证资格考试报名方式及考试日程,错过还要再等3个月!...
  5. 北斗b2频点频率_北斗系统中“三”的奥秘
  6. 圆章能随便刻吗_当归、人参、虫草熬成的养生汤,能随便销售吗?
  7. 「小程序JAVA实战」小程序 loading 提示框与页面跳转(37)
  8. 关于Promise详解
  9. js中this的理解
  10. VS2008的C++TR1库已经支持正则表达式