我在for循环中生成的绘图上有两个问题,我的代码加载一些数据,使用curve_fit将其拟合到一个函数,然后绘制测量数据并在5个不同的相同图上拟合测量的y值集合(测量数据由空圆圈标记表示,并由实线拟合为与标记相同的颜色)
首先,我正在努力减少拟合的线宽(实线),但是我减少了线宽的浮点值,我可以增加大小而不是减少它在下面输出中显示的值。其次,我希望传说中只显示圆形标记,而不是通过直线显示的圆圈 - 我似乎无法让这个工作,任何想法?
这是我的代码,附上了谷歌驱动器共享链接上的输出图和数据文件(出于某种原因,它在此帖子上删除了长行文字):
import scipy
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
#define vogel-fulcher-tamman (VFT) function
def vft(x,sigma_0,temp_vf,D):
return np.log(sigma_0)-((D*temp_vf)/(x-temp_vf))
#load and sort data
data=np.genfromtxt('data file',skip_header=3)
temp=data[:,0]
inverse_temp=data[:,1]
dc_conduct=np.log10(data[:,2:11])
only_adam=dc_conduct[:,4:9]
colors = ['b','g','r','c','m']
labels = ['50mg 2-adam','300mg 2-adam','100 mg 2-adam','150 mg 2-adam','250mg
2-adam']
for i in range(0,len(only_adam)):
#fit VTF function
y=only_adam[:,i]
popt, pcov = curve_fit(vft,temp,y)
#plotting
plt.plot(inverse_temp,y,color=colors[i],marker='o',markerfacecolor='none',
label=labels[i])
plt.plot(inverse_temp,vft(temp, *popt),linewidth=0.00001,linestyle='-
',color=colors[i])
plt.ylabel("Ionic Conductivity [Scm**2/mol]")
plt.xlabel("1000 / [T(K)]")
plt.axis('tight')
plt.legend(loc='lower left')
答案 0 :(得分:1)
only_adam
行,但使用循环变量i
索引该数组的列。这没有意义,导致显示的错误。 plot(..., ls="")