Matplotlib 2.02在for循环中绘图

时间:2018-04-12 22:51:48

标签: python python-3.x numpy matplotlib scipy

我在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')

enter image description here

1 个答案:

答案 0 :(得分:1)

  • 您循环遍历only_adam行,但使用循环变量i索引该数组的列。这没有意义,导致显示的错误。
  • 显示数据点的图表中有行。这些是显示的线条。您不能通过减小其他绘图的线宽来缩小它们。相反,你需要关闭该图的线型,例如plot(..., ls="")