OSError:[Errno 22]无效的参数:尝试plt.savefig时

时间:2019-12-21 22:12:37

标签: python matplotlib

我遇到了一个错误,但我不太清楚问题是什么以及为什么会出现此错误。在我的脚本中,我让用户输入一个文本文件,然后从该文本文件创建一个数据表。我分别提取并保存数据表的各列之一(我已经“合并”了导致错误的输入,使其变得更容易了。)

**File_Names=[]**
print('Enter name of peaklist files. When finished, type done and enter to stop.')
while True:
        Titration_file_input = input()
        if Titration_file_input.lower() not in ['done']:
                Titration_files.append(Titration_file_input)
        else:
            break

for Data in Titration_files:
    try:
        Titration_Datatable = pd.read_csv(Data, sep='\s+', header=None)
        Titration_Datatable.columns=['Column_1','Column_2','Column_3', 'Column_4', 'Column_5']
        Data_Table.append(Titration_Datatable)
    except:
        print('File' + ' ' + Data + ' ' + 'not found')


for Titration_Datatable in Data_Table:
    Peak_Height.append(Titration_Datatable.loc[:,'Column_4'])
    **File_Names.append(Titration_Datatable.loc[:,'Column_1'].drop([0],axis=0).drop([1],axis=0))**

然后我稍后将其称为生成的图形的保存文件的标题。

for values,i in zip(Titration_Data,File_Names):
    Intensity=[values]
    Intensity_Array=np.array(Intensity)
    y=Intensity_Array.flatten()
    popt, pcov = curve_fit(fun, x, y)
    kD.append(popt)
    fun_data=fun(x,*popt)
    output_for_graphing.append(fun_data)
    residuals=y-fun(x, popt)
    ss_res=np.sum(residuals**2)
    ss_tot=np.sum((y-np.mean(y))**2)
    r_squared=1-(ss_res/ss_tot)
    r2.append(r_squared)
    std = np.sqrt(np.diag(pcov))
    standard_deviation.append(std)
    plt.plot(x, y, label='data')
    plt.plot(x, fun(x, *popt), label='fitted')
    plt.xlabel('Ligand Concentration')
    plt.ylabel('Intensity')
    plt.title([i])
    plt.grid()
    plt.legend()
    **files_to_save=str([i])+'.png'
    plt.savefig(files_to_save)**
    plt.show()

我得到的错误是:

  plt.savefig(files_to_save)
OSError: [Errno 22] Invalid argument: '[2    1XH-HN\n3    2XH-HN\n4    3XN-HN\n5    4XN-HN\n6    5XN-HN\n7    6XN-HN\n8    7XN-HN\n9    8XN-HN\nName: Column_1, dtype: object].png'

我认为可能是格式问题,如果我将其放入列表或数组中就可以使用。但是,当我将其更改为数组时,这是我得到的错误:

  plt.savefig(files_to_save)
OSError: [Errno 22] Invalid argument: "[array(['1XH-HN', '2XH-HN', '3XN-HN', '4XN-HN', '5XN-HN', '6XN-HN',\n       '7XN-HN', '8XN-HN'], dtype=object)].png"

在这一点上,我不知道为什么会出现格式错误。我唯一想到的是plt.savefig不接受连字符,或者它不能读取连字符(例如,只需定义要使用的编码)?提前谢谢你!

1 个答案:

答案 0 :(得分:1)

您正在尝试保存一个文件

  

[2 1XH-HN \ n3 2XH-HN \ n4 3XN-HN \ n5 4XN-HN \ n6 5XN-HN \ n7 6XN-HN \ n8 7XN-HN \ n9 8XN-HN \ n名称:列_1,dtype:对象] .png

您不能保存带有方括号,反斜杠和冒号的文件。 str[i]返回文件名列表,这就是您出错的地方。也许尝试

for ix, (values,i) in enumerate(zip(Titration_Data,File_Names)):
    # etc

然后,您将可以使用数字str[ix]进行索引。我认为您使用的是zip错误。这是一个简单的示例:

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]

for ix, (i, ii) in enumerate(zip(a, b)):
    print('ix:', ix, 'i:', i, 'ii:', ii)
ix: 0 i: 1 ii: 5
ix: 1 i: 2 ii: 6
ix: 2 i: 3 ii: 7
ix: 3 i: 4 ii: 8