OSError: [Errno 22] Недопустимый аргумент: при попытке запустить plt.savefig - PullRequest
0 голосов
/ 22 декабря 2019

Я столкнулся с ошибкой, и я не совсем знал, в чем проблема и почему я получаю эту ошибку. В моем сценарии пользователи вводят текстовый файл и создают данные из этого текстового файла. Я извлекаю и сохраняю один из столбцов таблицы данных по отдельности (я «выделил» ввод, из-за которого ошибка упрощается).

**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 Ответ

1 голос
/ 22 декабря 2019

Вы пытаетесь сохранить один файл с именем

[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

Невозможно сохранить файл в скобках, обратной косой черте иколоны. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...