ОШИБКА ЗНАЧЕНИЯ: x, y и строка формата не должны быть None. (ошибка при построении петли гистерезиса)

#python #python-3.x #numpy #matplotlib

Вопрос:

Используя данные об усталости с низким циклом, я пытаюсь построить петлю гистерезиса. Но я получаю следующую ошибку:

 [ -52.18297297  -45.58565338   16.9913185  ... -354.53630032 -295.50857248
-155.42088911]
[-0.01229182 -0.00891753  0.02256744 ... -0.33507242 -0.31283728
-0.24790212]
Traceback (most recent call last):
File "f:I2MLCFEp1_camp4_P4_TTH650 06-9-21 11 01 24ep1_camp4_P4.py", line 16, in <module>
plt.plot(strain, Sigma, color = 'k')
File "C:UsersDELLAppDataLocalProgramsPythonPython39libsite- 
packagesmatplotlibpyplot.py", line 2840, in plot
return gca().plot(
File "C:UsersDELLAppDataLocalProgramsPythonPython39libsite- 
packagesmatplotlibaxes_axes.py", line 1743, in plot
lines = [*self._get_lines(*args, data=data, **kwargs)]
File "C:UsersDELLAppDataLocalProgramsPythonPython39libsite- 
packagesmatplotlibaxes_base.py", line 273, in __call__
yield from self._plot_args(this, kwargs)
File "C:UsersDELLAppDataLocalProgramsPythonPython39libsite- 
packagesmatplotlibaxes_base.py", line 379, in _plot_args
raise ValueError("x, y, and format string must not be None")
ValueError: x, y, and format string must not be None
 

И вот мой код:

 import matplotlib.pyplot as plt
import numpy as np
plt.style.use(['science','no-latex'])

x = np.loadtxt('F:\I2M\LCF\Ep1_camp4_P4_TTH650 06-9-21 11 01 24\data_1.csv',unpack = True, 
skiprows = 2, usecols = 2, delimiter = ',')
y = np.loadtxt('F:\I2M\LCF\Ep1_camp4_P4_TTH650 06-9-21 11 01 24\data_1.csv',unpack = True, 
skiprows = 2, usecols = 3, delimiter = ',')
stress = (x*1000)/28.27   #N/mm^2 = MPa
length = len(stress)
length = len(y)

plt.figure(figsize=(5, 5))
Sigma = print(stress[0:length:10]) #stress
strain = print(y[0:length:10])


plt.plot(strain, Sigma, color = 'k')

plt.show()
 

Данные содержат много строк. Поэтому я использовал некоторые команды для доступа только к определенным значениям из строки

Комментарии:

1. Вы проверяли, есть ли у x или y None элемент?

2. Что такое strain ? его фактическая стоимость, а не то, что вы думаете, что она должна быть!

Ответ №1:

Ваша проблема здесь

 Sigma = print(stress[0:length:10]) #stress
strain = print(y[0:length:10])
 

то, что вы хотите правдоподобно, — это выборка каждой 10-й точки данных , но то, что вы получаете … ничего или, с точки зрения Python: None , так что позже ваша трассировка стека сообщит вам об этом x, y, and format string must not be None .

Почему это происходит и как вы решаете проблему?

Когда вы делаете задания, то значение выражения в правой сохраняется, и вы можете использовать имя слева, чтобы использовать его позже, так что вы сохранить, например, значение , возвращаемое print(y[0:length:10]) , чтобы использовать его позже под названием strain , но print() используются для его побочных эффектов (например, показывая кучу символов на вашем устройстве), и значение, возвращаемое в этих случаях является по умолчанию None , не то, что было показано на вашем терминале.

Если я понял ваши намерения, вам следует опустить две строки выше и просто использовать

 plt.plot(x[0:length:10], y[0:length:10], color='k')
 

Кстати, у вас есть

 length = len(stress)
length = len(y)
 

но вы читаете их из одного и того же файла, одного задания должно быть достаточно…


пс

 x, y = np.loadtxt('…\data_1.csv', unpack=1, skiprows=2, usecols=[2,3], delimiter=',')