如何以Python输出拟合数据以供在Origin中使用

如何以Python输出拟合数据以供在Origin中使用,python,graph,output,data-analysis,originlab,Python,Graph,Output,Data Analysis,Originlab,我有一个代码,可以读取50个文本文件,每个文件生成一个直方图,每个直方图拟合一个高斯分布。然后取每个高斯分布下的面积并绘制时间图(基本上就是它乘以18的文本文件) 然后我想在origin中分别处理这些数据。我可以让代码从图形中打印出y值,但我正在努力将其更改为可以复制并粘贴到类似origin的电子表格格式的形式 打印件为: 77.78630383833547, 62.92926582239441, 63.84025706577048, 55.489066870438165, 38.6079798

我有一个代码,可以读取50个文本文件,每个文件生成一个直方图,每个直方图拟合一个高斯分布。然后取每个高斯分布下的面积并绘制时间图(基本上就是它乘以18的文本文件)

然后我想在origin中分别处理这些数据。我可以让代码从图形中打印出y值,但我正在努力将其更改为可以复制并粘贴到类似origin的电子表格格式的形式

打印件为:

77.78630383833547, 62.92926582239441, 63.84025706577048, 55.489066870438165, 38.60797989548756, 40.771390484048545, 14.679073842876978, 33.95959972488966, 29.41960790300141, 32.93241034391399, 30.927428194781815, 31.086396885182356, 21.52771899125612, 4.27684299160886, 6.432975528727562, 7.500376934048583, 18.730555740591637, 4.355896959987761, 11.677509915219987, 12.865482314301719, 0.6120306267606219, 12.614420497451556, 2.2025029753442404, 9.447046999592711, 4.0688197216393425, 0.546672901996845, 1.12780050608251, 2.2030852358874635, 2.202804718915858, 0.5726686031033587, 0.5465322281618783, 0.5185100682386156, 0.575055917739342, 0.5681697592593679
如果需要,完整代码为。 我猜我写的另一个变量是0,18,36,54。。。因此,python可能不需要这样做

更新 请求了相关的代码示例。我认为这是一个最小的例子。我尝试输出的相关变量是安培。我不介意这是通过保存文件(可能更喜欢)还是在IDE控制台中完成的

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from numpy import exp, loadtxt, pi, sqrt, random, linspace
from lmfit import Model
import glob, os

## Define gaussian
def gaussian(x, amp, cen, wid):
    """1-d gaussian: gaussian(x, amp, cen, wid)"""
    return (amp / (sqrt(2*pi) * wid)) * exp(-(x-cen)**2 / (2*wid**2))

## Define exponential decay
def expdecay(x, t, A): 
     return A*exp(-x/t)

## Define constants
fileToRun = 'Run0'
location = 'ControlRoom6'
stderrThreshold = 10
minimumAmplitude = 0.1
approxcen = 780
DeadTime = 3
LiveTime = 15


## Get location of files to be loaded

## Define paramaters
amps = []; ampserr = []; ts = []
folderToAnalyze = baseFolder + fileToRun + '\\'

## Generate the time array and coincidence plots
for n in range(0, numfiles):
    
    ## Load text file
    x = np.linspace(0, 8191, 8192)
    finalprefix = str(n).zfill(3)
    fullprefix = folderToAnalyze + prefix + finalprefix
    y = loadtxt(fullprefix + ".Spe", skiprows= 12, max_rows = 8192) 

    ## Make figure and label
    fig, ax = plt.subplots(figsize=(15,8))

    ## Plot data
    ax.bar(x, y)
    ax.set_xlim(600,960)
    
    # Fit data to a gaussian
    gmodel = Model(gaussian)
    result = gmodel.fit(y, x=x, amp=8, cen=approxcen, wid=1)
        
    ## Append to list if error in amplitude and amplitude itself is within reasonable bounds
    if result.params['amp'].stderr < stderrThreshold and result.params['amp'] > minimumAmplitude:
        amps.append(result.params['amp'].value) 
        ampserr.append(result.params['amp'].stderr) 
        ts.append(MaestroT*n)

## Plot decay curve
print(amps)
fig, ax = plt.subplots()
ax.errorbar(ts, amps, yerr= 2*np.array(ampserr), fmt="ko-", capsize = 5, capthick= 2, elinewidth=3, markersize=5)
plt.xlabel('Time', fontsize=14)
plt.ylabel('Peak amplitude', fontsize=14)
plt.title("Decay curve of P-31 by $β^+$ emission", fontsize=14)
    
## Fit decay curve
将numpy导入为np
将matplotlib.pyplot作为plt导入
从scipy.optimize导入曲线\u拟合
从numpy导入exp、loadtxt、pi、sqrt、random、linspace
从lmfit导入模型
导入全局操作系统
##定义高斯分布
def高斯(x、amp、cen、wid):
“1-d高斯:高斯(x,amp,cen,wid)”
返回(amp/(sqrt(2*pi)*wid))*exp(-(x-cen)**2/(2*wid**2))
##定义指数衰减
def EXP衰减(x,t,A):
返回一个*exp(-x/t)
##定义常数
fileToRun='Run0'
位置='ControlRoom6'
stderrThreshold=10
最小振幅=0.1
近似值=780
死区时间=3
现场时间=15
##获取要加载的文件的位置
##定义参数
安培=[];安培数=[];ts=[]
folderToAnalyze=baseFolder+fileToRun+'\\'
##生成时间数组和符合图
对于范围内的n(0,numfiles):
##加载文本文件
x=np.linspace(081918192)
finalprefix=str(n).zfill(3)
fullprefix=文件夹分析+前缀+最终引用
y=loadtxt(fullprefix+“.Spe”,skiprows=12,最大行数=8192)
##制作图形和标签
图,ax=plt.子批次(图尺寸=(15,8))
##绘图数据
轴杆(x,y)
ax.set_xlim(600960)
#将数据拟合到高斯分布
G模型=模型(高斯)
结果=G模型拟合(y,x=x,amp=8,cen=approxcen,wid=1)
##若振幅和振幅本身的误差在合理范围内,则追加到列表中
如果result.params['amp'].stderr最小振幅:
amps.append(result.params['amp'].value)
amperr.append(result.params['amp'].stderr)
ts.append(大师*n)
##绘制衰减曲线
打印(安培)
图,ax=plt.子批次()
最大误差条(ts,amp,yerr=2*np.array(amp),fmt=“ko-”,倾覆=5,capthick=2,elinewidth=3,markersize=5)
plt.xlabel('Time',fontsize=14)
plt.ylabel('峰值振幅',fontsize=14)
plt.title(“P-31通过$β^+$emission的衰减曲线”,fontsize=14)
##拟合衰减曲线

如果您的想法是将
amps
amperr
ts
的值打印到一个文件中以供以后操作,您可以执行以下操作:

如果振幅和振幅本身的误差在合理范围内,则添加到列表中 如果result.params['amp'].stderr最小振幅: amps.append(result.params['amp'].value) amperr.append(result.params['amp'].stderr) ts.append(大师*n) ##将结果转换为csv文件的字符串列表 缓冲区=['#拟合结果…'] 对于拉链中的t、a、e(ts、amps、AMPERR): 追加({.8g},{.8g},{.8g},{.8g}).format(_t,_a,_e)) buff.append(“”) ##保存结果 打开('results.csv','w')作为fh: f、 写入('\n'.连接(缓冲区))
希望这有助于解决您的问题。如果没有,请细化问题。

如果您使用的是最近的Origin,您可以使用originpro模块传输数据

import originpro as op
import pandas as pd

# balabalabala

df = pd.DataFrame(list(zip(ts, amps, ampserr)), columns=['ts', 'Amp', 'Err']) # create a dataframe
op.find_sheet('w').from_df(df) # import dataframe to activated worksheet
如果使用的是旧版本,则必须将数据保存为文件。 有关更多信息,请查看他们的文档页面:

请将相关代码包含在您的帖子正文中,以形成一个完整的表单!我举了一个例子。应该是相关的部分,谢谢!我认为我的版本是2018年版的origin,因此对于直接解决方案来说可能还不够新。你是对的,这些是我想要提取的变量