#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=',')