Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >再次,我有4个图的R,不同的x轴,但相似的趋势曲线。我试图覆盖它们,但它们没有对齐。

再次,我有4个图的R,不同的x轴,但相似的趋势曲线。我试图覆盖它们,但它们没有对齐。
EN

Stack Overflow用户
提问于 2020-08-18 05:59:47
回答 1查看 142关注 0票数 1

我被协助在这个链接我在R上有两个图,它们有不同的x轴,但趋势曲线相似。如何将它们叠加在r上?上覆盖两个不同x轴的图.然而,我现在正在尝试覆盖4图。我试图覆盖他们,但他们没有对齐。我需要帮助覆盖这四张图。

我的初步审判代码如下:

  1. 我的原始数据在下面的链接https://drive.google.com/drive/folders/1ZZQAATkbeV-Nvq1YYZMYdneZwMvKVUq1?usp=sharing中。
  2. 用于执行的代码: 第一,数据=第一,aes(x,y)) +geom_line(数据= 1)第二,数据=第二,aes(x,y)) +geom_line(数据= 1)第三<- g图(数据=第三,aes(x,y))+geom_line(数据=1,)+ geom_line(pch = 1)第四<- ggplot(数据=第四,aes(x,y)) + geom_line(pch = 1)第一个$匹配<- -第一个$x第二个$匹配<- -第二个$x-第二个$x$x$y == max(第二个$y)+第一个$xfirst$y == max(第一个$y)第三个$==max(第一个$y)第三个$x4$匹配<-第四个$x第一个$序列=“第二个”$系列=“第二个”$系列=“第三个”==系列=“第四个”all_data <- rbind(第一,第二,第一,第二,第三,第四,all_data+ geom_line(aes(x = match,y,color =element_blank))+scale_x_continuous(名称= "X,任意单位“)+主题(axis.text.x= element_blank())

会非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-22 05:51:10

我想我会为你的问题提出一个解决方案。OP有4个带有xy列的数据集,并且希望在每个数据集中对齐峰值,以便它们相互叠加在一起。下面是我们将所有数据集绘制在一起时的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p <- ggplot(mapping=aes(x=x, y=y)) + theme_bw() +
  geom_line(data=first, aes(color="first")) +
  geom_line(data=second, aes(color="second")) +
  geom_line(data=third, aes(color="third")) +
  geom_line(data=fourth, aes(color="fourth"))

办法如下:

  1. 查找每个数据集的峰值x值。
  2. 调整每个峰值x值以匹配第一个峰值x值。
  3. 将数据集和绘图组合在一起它尊重Tidy数据原则

找出峰值并调整x值

为了找到峰值,我喜欢使用来自findpeaks()库的pracma函数。为函数提供数据集的y值(按x值的增加排列),该函数将返回一个矩阵,每一行代表一个“峰值”,列为峰值的峰值、索引或数据集行的高度、峰值开始的位置和峰值结束的位置。举个例子,下面是我们如何应用这个原则以及结果在其中一个数据集上的表现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(pracma)

first <- arrange(first, x)  # arrange first by increasing x
findpeaks(first$y, sortstr = TRUE, npeaks=1)

        [,1] [,2] [,3] [,4]
[1,] 1047.54  402  286  515

参数sortstr=表示我们希望先按“最高”排序的峰值列表,而我们只对选择第一个峰值感兴趣。在这种情况下,我们可以看到402是峰值的first中x,y值的索引。所以我们可以通过first[index,]$x访问这个x值。

这里我们可能关心的一个问题是,这可能不适用于fourth,因为y的最大值实际上不是感兴趣的峰值;然而,如果我们运行该函数并测试它,使用我们返回最高峰值的findpeaks()方法可以很好地工作:显然,函数没有在右边找到一个“峰值”,因为它有一个“向上”,而不是一个“向下”。

下面的函数处理我们需要完成的所有步骤:排列、查找峰值和调整峰值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# find the minimum peak.  We know it's from third, but here's
# how you do it if you don't "know" that

peaks_first <- findpeaks(first$y, sortstr = TRUE, npeaks=1)
peaks_second <- findpeaks(second$y, sortstr = TRUE, npeaks=1)
peaks_third <- findpeaks(third$y, sortstr = TRUE, npeaks=1)
peaks_fourth <- findpeaks(fourth$y, sortstr = TRUE, npeaks=1)

# minimum peak x value
peak_x <- min(c(first[peaks_first[2],]$x, second[peaks_second[2],]$x, third[peaks_third[2],]$x, fourth[peaks_fourth[2],]$x))

# function to use to fix each dataset
fix_x <- function(peak_x, dataset) {
  dataset <- arrange(dataset, x)
  d_peak <- findpeaks(dataset$y, sortstr = TRUE, npeaks=1)
  d_peak_x <- dataset[d_peak[2],]$x
  x_adj <- peak_x - d_peak_x
  dataset$x <- dataset$x + x_adj
  return(dataset)
}

# apply and fix each dataset
fix_first <- fix_x(peak_x, first)
fix_second <- fix_x(peak_x, second)
fix_third <- fix_x(peak_x, third)
fix_fourth <- fix_x(peak_x, fourth)

# combine datasets
fix_first$measure <- 'First'
fix_second$measure <- 'Second'
fix_third$measure <- 'Third'
fix_fourth$measure <- 'Fourth'

fixed <- rbind(fix_first, fix_second, fix_third, fix_fourth)
fixed$measure <- factor(fixed$measure, levels=c('First','Second','Third','Fourth'))

密谋

现在,fixed包含了所有的数据,我们可以将它们全部绘制在一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(fixed, aes(x=x, y=y, color=measure)) + theme_bw() +
  geom_line()

交替作图法

如果您想要将这些行“叠加”在一起,这就是所谓的脊线图。对于如何创建脊线图,我可以展示两种方法: faceting或使用ggridgesgeom_ridgeline()。两样我都能演示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Using facets
ggplot(fixed, aes(x=x, y=y, color=measure)) + theme_bw() +
  geom_line(show.legend = FALSE) +
  facet_grid(measure~.)

注意,我选择不显示图例,因为条形文本表示相同的信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Using ggridges and geom_ridgeline
ggplot(fixed, aes(x=x, y=measure, color=measure)) + theme_bw() +
  geom_ridgeline(aes(height=y), fill=NA, scale=0.001)

在使用geom_ridgeline()时,您会注意到y=美学变成了用于堆叠的列,而原来的y值则被映射到height=美学。我还必须使用scale=,因为对于离散值,每个measure将被视为整数(1、2、3、4)。您的height=值高于此值,因此我们必须缩小它们,使它们在此范围内(缩小约1,000)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63470283

复制
相关文章
Qt入门系列(二)
选中mainWindow.cpp右键->在Explor中显示->粘贴进来(显示包含的目录)
用户9831583
2022/06/16
2K0
Qt入门系列(二)
QT从控件部分知识点整理
2.设置可以停靠的区域,例如:只能停靠在左和右 3.设置工具栏是否可以浮动,即工具栏要么停靠在左边,要么停靠在右边,一撒手就立刻回去了 4.设置移动:如果传入一个false,则表示该工具栏无法拖拽移动
大忽悠爱学习
2021/11/15
1.1K0
QT Creator 快速入门教程 读书笔记(二)
一 窗口部件 基础窗口部件QWidget类是所有用户界面对象的基类,窗口和控件都是直接或间接继承自 QWidget,下面我们来看一个很简单的例子: 窗口部件(Widget)简称部件,是QT中建立界面的
用户1198337
2018/01/19
1.3K0
QT Creator 快速入门教程 读书笔记(二)
python pyqt5 QDialog
QDialog/QMessageBox,QFileDialog,QFontDialog,QInputDialog
用户5760343
2019/07/05
8860
『PyQt5-基础篇』| 01 简单的基础了解
虫无涯
2023/08/25
4090
python中如何打开csv文件_python如何读取csv文件
python如何读取csv文件,我们这里需要用到python自带的csv模块,有了这个模块读取数据就变得非常容易了。
全栈程序员站长
2022/09/16
7.9K0
python中如何打开csv文件_python如何读取csv文件
PyQt5的主窗口QMainWindow简介
看过上一篇我们知道,在PyQt5中了,所有的控件都是继承自。在桌面应用当中,我们常用的软件都会包含一个主窗口。主窗口就是承载所有控件的一个窗体。在PyQt5当中常用的主窗体有两种QMainWindow和QDialog。当然这两个也是继承自QWidget类。因为他们都继承自这个类,所以这三个类都是可以用来创建主窗口的,可以直接使用,也可以继承后再使用。
星星在线
2019/05/28
4K0
Qt界面编程:窗口传值方式
1、问题   一个这样的场景:主窗口界面有一个菜单项,点击该菜单项弹出一个对话框。点击对话框上的测试按钮,显示主窗口类中的一个字符串成员的内容。这就是整个窗口传值的需求描述。如何解决呢?首先想到的解决方法自然是使用Qt自带的signal/slot机制。即首先发信号给父窗口,父窗口接到信号执行槽函数发送一个携带所需数据的信号给子窗口。但是疑问来了:要在子窗口中接收到父窗口的信号必须进行signal和slot的绑定。这需要主窗口类的定义(1)。担心头文件的递归包含,我们只好再想另外一个方法。直接在子窗口中利用指
24K纯开源
2018/01/18
3K0
PyQt5 基本窗口控件(按钮类/对话框类)
learn from 《PyQt5 快速开发与实战》 https://doc.qt.io/qtforpython/index.html https://www.riverbankcomputing.com/static/Docs/PyQt5
Michael阿明
2022/05/10
1.1K0
PyQt5 基本窗口控件(按钮类/对话框类)
C/C++ Qt 自定义Dialog对话框组件应用
在上一篇博文 《C/C++ Qt 标准Dialog对话框组件应用》 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能。
微软技术分享
2022/12/23
7500
C/C++ Qt 自定义Dialog对话框组件应用
C/C++ Qt 自定义Dialog对话框组件应用
在上一篇博文 《C/C++ Qt 标准Dialog对话框组件应用》 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能。
微软技术分享
2022/12/28
6430
C/C++ Qt 自定义Dialog对话框组件应用
qdialog 返回值_python-PyQt QDialog返回响应是或否
confirmation_dialog = uic.loadUiType(“ui\confirmation_dialog.ui”)[0]
全栈程序员站长
2022/07/31
3710
PyQT模块、类、控件介绍
最近在搞一些基于PyQT的开发,开发过程中一直对PyQT相关模块、类、控件比较模糊,于是花了一些力气,去收集和整理了一下PyQT的一些基础,希望对大家有帮助!
python与大数据分析
2023/09/03
6650
PyQT模块、类、控件介绍
QMainWindow和QAction
QMainWindow是Qt 框架带来的一个预定义好的主窗口类。一个主窗口一般都是由下图所示部分组成。
zy010101
2020/04/08
7000
QMainWindow和QAction
QtreeWidget_遍历qtreewidget
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
1K0
QtreeWidget_遍历qtreewidget
[PyQt Tutorial]7.QDialog 类
https://www.tutorialspoint.com/pyqt/pyqt_introduction.htm
bsbforever
2020/08/19
4030
[PyQt Tutorial]7.QDialog 类
Python 图形界面框架 PyQt5 使用指南!
使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎。但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具。
快学Python
2021/12/13
7.1K0
Python 图形界面框架 PyQt5 使用指南!
PyQt5-基本控件| 主窗口的类型、创建以及代码如何实现?
虫无涯
2023/10/24
4360
Qt Creator和VS2010中添加槽信号_差异与详解
2.点击mainwindow打开设计窗体在窗体上添加一个PushButton。点击右键先把转到槽
战神伽罗
2019/07/24
2.2K0
Qt Creator和VS2010中添加槽信号_差异与详解
点击加载更多

相似问题

PY Qt从QDialog打开QMainWindow

12

如何在QDialog中显示QMainWindow

327

打开QMainWindow后从静态函数运行QDialog对象

10

如何从QDialog访问QMainWindow中的小部件

113

如何从QMainWindow刷新/更新/重绘QDialog?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文