如何在origin里将多条函数曲线画在一张图里

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在origin里将多条函数曲线画在一张图里相关的知识,希望对你有一定的参考价值。

是函数图,不是数据图

在origin里将多条函数曲线画在一张图里方法:


1、首先打开origin8;自动建立文件。



2、点击图中所圈的图标给book工作表增加列,直到满足自己所画图需要为止。



3、把每条曲线的数据输入book工作表中,如图所示,A、 B列,C、D列和E、F列分别为三条不同曲线的数据。



4、选中C列,然后右击,选set as下属的X,就成功将C列设为第二条曲线的X轴,类似的把第三条曲线的数据进行相同的处理,这样当每条曲线的X轴数据不一样时也不会影响作图。



5、选中所有数据,点击左下方线条右边的小三角形,在出现的选项中选择line。



6、这样就成功画出了三条不同数据的曲线。


参考技术A

1、打开origin8.5,


2、自动创建一个空白的workbook

3、将数据输入在表格里

4、点住表头位置,全选数据。选set as下属的X,就成功将C列设为第二条曲线的X轴,类似的把第三条曲线的数据进行相同的处理,这样当每条曲线的X轴数据不一样时也不会影响作图。

5、点击绘图工具。


6、多条线段放在同一张图里了。

参考技术B

1、直接在origin里输入相关数据以后,找到图示按钮并选择跳转。

2、下一步如果没问题,就继续按照分析→信号处理→平滑的顺序进行点击。

3、这个时候弹出新的界面,需要根据实际情况确定其中的窗口点数。

4、这样一来等发现对应结果以后,即可将多条函数曲线画在一张图里了。

参考技术C

1、首先,打开一个workbook,将数据输入在表格里

2、如图所示,注意,双击表头可以改变该列的性质,是X轴的就改为X,Y轴的就改为Y。

3、然后点住表头位置,全选数据。

4、再在origin左下角点击绘图工具,就将多条线段放在同一张图里了。

5、可能需要在Y方向上移动线段,只需右击白色地方,选择layer contents,然后点击layer properties,在stack选项中勾选 individual。点击ok保存,左击图线就可以移动

参考技术D

1. 先画出一个函数图像:

y=x²

2. 再次“绘制函数图像”:

绘制函数图像

3. 在弹出的对话框中选择”加入当前图“:

加入当前图

4. 两个函数曲线绘制在一起:

y=x²和y=x³绘制在一起

python matplotlib怎么在一张图上画多条曲线?Python处理多个csv文件生成叠加曲线图——综合示例:平滑处理图注图例图题范围缩放

文章目录

1 问题描述

当我们使用PyTorch可视化工具-Tensorboard打开训练曲线时,有时希望多条曲线放在一张图像显示、对比。

当我们写论文时,希望多条曲线放在一张图像对比、显示。
直接截图放文档里,可比性差,而且原来的坐标轴的数字太小不能修改,导致看不清。

这是我们需要,将数据导出,用python matplotlib处理多个csv文件,在一张图上画多条曲线

2 下载曲线数据

将曲线数据用表格的形式下载,然后用python自己绘制曲线图;
下载格式 .csv

数据下载好后,重命名

3 用python简单的 绘制曲线

from matplotlib import pyplot as plt
import csv
import glob
from os.path import basename
import numpy as np

files = sorted(glob.glob("D:/python/pltt/train_thres_error/*.csv"))    #读取目录下所有以.csv结尾的文件,这里可以添加绝对路径
for file in files:
    filename = basename(file).rsplit('.', 1)[0]         #用.来分割文件名,取前半部分,例如XX.csv,取XX                                                
    print('\\r'+ filename + "  ", flush = True)                                                             
    with open(file) as f:                                                                                
        csvreader = csv.reader(f, delimiter = ",", quotechar='"')                                       
        for line in range(1):  #1代表从文件第2行开始读取
            next (csvreader)  
        print("lines: ",line) #打印行数

        x = []                                                                                    
        y = []    #横纵坐标分别建立了两个list
        for row in csvreader:
            x.append(float(row[1]))   #读取第23列数据                                                            
            y.append(float(row[2]))   #读取数据,放入list                                                             

        # 可视化图线
        plt.plot(x, y)  

plt.show()   


可以看到上面的曲线震荡的很厉害,不利于观察整体趋势,需要滤波处理;
tensorboard显示的曲线是经过平滑处理过的(其灰黑色的背景就平滑处理前的波形);

4 滤波平滑处理

Savitzky-Golay 滤波器讲解

#Savitzky-Golay 滤波器实现曲线平滑
'''
 scipy.signal.savgol_filter(y, window_length, polyorder)
     y--为要滤波的信号
     window_length--即窗口长度取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。
     polyorder--为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。
 '''

详细实现

from matplotlib import pyplot as plt
import csv
import glob
from os.path import basename
import numpy as np

# 使用Savitzky-Golay 滤波器后得到平滑图线
from scipy.signal import savgol_filter

files = sorted(glob.glob("D:/python/pltt/train_thres_error/*.csv"))    #读取目录下所有以.csv结尾的文件,这里可以添加绝对路径
for file in files:
    filename = basename(file).rsplit('.', 1)[0]         #用.来分割文件名,取前半部分,例如XX.csv,取XX                                                
    print('\\r'+ filename + "  ", flush = True)                                                             
    with open(file) as f:                                                                                
        csvreader = csv.reader(f, delimiter = ",", quotechar='"')                                       
        for line in range(1):  #1代表从文件第2行开始读取
            next (csvreader)  
        print("lines: ",line) #打印行数

        x = []                                                                                    
        y = []    #横纵坐标分别建立了两个list
        for row in csvreader:
            x.append(float(row[1]))   #读取第23列数据                                                            
            y.append(float(row[2]))   #读取数据,放入list                                                             

        #Savitzky-Golay 滤波器实现曲线平滑
        '''
        scipy.signal.savgol_filter(y, window_length, polyorder)
            y--为要滤波的信号
            window_length--即窗口长度取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。
            polyorder--为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。
        '''
        y = savgol_filter(y, 99, 3, mode= 'nearest')
        # 可视化图线
        plt.plot(x, y)
plt.show()                                                                                               
  

5 设置图题、图例、字体、网格、保存曲线图

from matplotlib import pyplot as plt
import csv
import glob
from os.path import basename
from scipy.interpolate import make_interp_spline
import numpy as np
 
# 使用Savitzky-Golay 滤波器后得到平滑图线
from scipy.signal import savgol_filter

#dpi参数指定绘图对象的分辨率,即每英寸多少个像素 ;figsize:指定figure的宽和高,单位为英寸 
fig=plt.figure(dpi = 80, figsize=(15,8))
                       
#plt.title("Train_thres_error",fontsize = 16)
plt.xlabel("Iterations", fontsize = 25)    #横坐标
plt.ylabel("Train_thres_error (mm)", fontsize = 25)        #纵坐标
files = sorted(glob.glob("D:/python/pltt/train_thres_error/*.csv"))    #读取目录下所有以.csv结尾的文件,这里可以添加绝对路径
for file in files:
    filename = basename(file).rsplit('.', 1)[0]         #用.来分割文件名,取前半部分,例如XX.csv,取XX                                                
    print('\\r'+ filename + "  ", flush = True)                                                             
    with open(file) as f:                                                                                
        csvreader = csv.reader(f, delimiter = ",", quotechar='"')                                       
        for line in range(1):  #1代表从文件第2行开始读取
            next (csvreader)  
        print("lines: ",line) #打印行数

        x = []                                                                                    
        y = []    #横纵坐标分别建立了两个list
        for row in csvreader:
            x.append(float(row[1]))   #读取第23列数据                                                            
            y.append(float(row[2]))   #读取数据,放入list                                                             
        
        # plt.xlim((0,90000)) #横轴范围
        # plt.ylim((0,0.9))   #纵轴范围
        plt.tick_params(labelsize=20)#设置坐标刻度值的字体大小
        
        #Savitzky-Golay 滤波器实现曲线平滑
        '''
        scipy.signal.savgol_filter(y, window_length, polyorder)
            y--为要滤波的信号
            window_length--即窗口长度取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。
            polyorder--为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。
        '''
        y = savgol_filter(y, 55, 3, mode= 'nearest')
        # 可视化图线
        plt.plot(x, y, label = '%s' % filename,linewidth=2.0)
        #plt.legend()函数的作用是给图像加图例。
        plt.legend(frameon=True,loc="upper right",fontsize=25) #分别为图例有边框、图例放在右上角、图例大小
        #plt.grid()#添加网格
    
        plt.savefig('D:/python/pltt/Train_thres_error' + '.png',dpi = 80)   #保存了绘制的图像     
        print("Done processing " + str(len(files)) + " files.")  
plt.grid()#添加网格 

plt.show()         

6 补充

6.1 python 曲线平滑处理——方法总结-详解

python 曲线平滑处理——方法总结(Savitzky-Golay 滤波器、make_interp_spline插值法和convolve滑动平均滤波)

6.2 Tensorboard可视化训练曲线导出数据用Python绘制

Tensorboard可视化训练曲线导出数据用Python绘制

6.3 PyTorch可视化工具-Tensorboard在线查看训练曲线、网络结构图等

Tensorboard在线查看训练曲线、网络结构图等

6.4 PyTorch常用小工具-Tensorboard、Summary、Profiler

PyTorch常用小工具-Tensorboard、Summary、Profiler

7 源码下载、曲线数据下载

在一张图上绘制多条曲线?Python处理多个csv文件生成叠加曲线图-综合示例 下载

以上是关于如何在origin里将多条函数曲线画在一张图里的主要内容,如果未能解决你的问题,请参考以下文章

python 将多个模型的ROC曲线绘制在一张图里(含图例)

origin8.0中怎么在一条拟合好的曲线图上再添加一条拟合曲线?

python---将多条曲线画在一幅图

origin 堆叠时如何在一个图中画多条曲线

如何在origin中绘制多条曲线

请问用Origin如何将多条同一横纵坐标的曲线以不同的层次显示在同一张图上,如下图所示呢???