Почему графики Найквиста не работают в моем блокноте Jupyter? (питон)

Я пытаюсь сделать график Найквиста функции в python, в блокноте Юпитера. Когда я пытаюсь использовать функцию control.nyquist_plot, используемую для создания графика, pyton выдает ошибку в одном из файлов библиотек. Он рисует только часть диаграммы Найквиста, прежде чем возникает эта ошибка.

Я также пытался использовать тот же код, что и другие, чтобы убедиться, что это не синтаксическая ошибка, но я получаю ту же ошибку с файлами, которые работают для других людей.

это мой код:

import numpy as np
import matplotlib.pyplot as plt
import control

sys = control.tf([0, 0, 10], [1, 3, 2])

fig = plt.figure(figsize=(10, 5))
control.nyquist_plot(sys);

И это ошибка, которую я получаю:


ValueError                                Traceback (most recent call last)
Cell In\[3\], line 4
1 sys = control.tf(\[0, 0, 10\], \[1, 3, 2\])
3 fig = plt.figure(figsize=(10, 5))
\----\> 4 control.nyquist_plot(sys);

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\control\\freqplot.py:1024, in nyquist_plot(syslist, omega, plot, omega_limits, omega_num, label_freq, color, return_contour, warn_encirclements, warn_nyquist, \*\*kwargs)
1022 x_scl = np.ma.masked_where(scale_mask, resp.real)
1023 y_scl = np.ma.masked_where(scale_mask, resp.imag)
\-\> 1024 plt.plot(
1025     x_scl \* (1 + curve_offset), y_scl \* (1 + curve_offset),
1026     primary_style\[1\], color=c, \*\*kwargs)
1028 # Plot the primary curve (invisible) for setting arrows
1029 x, y = resp.real.copy(), resp.imag.copy()

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\matplotlib\\pyplot.py:2785, in plot(scalex, scaley, data, \*args, \*\*kwargs)
2783 @\_copy_docstring_and_deprecators(Axes.plot)
2784 def plot(\*args, scalex=True, scaley=True, data=None, \*\*kwargs):
\-\> 2785     return gca().plot(
2786         \*args, scalex=scalex, scaley=scaley,
2787         \*\*({"data": data} if data is not None else {}), \*\*kwargs)

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\matplotlib\\axes_axes.py:1690, in Axes.plot(self, scalex, scaley, data, \*args, \*\*kwargs)
1688 lines = \[\*self.\_get_lines(\*args, data=data, \*\*kwargs)\]
1689 for line in lines:
\-\> 1690     self.add_line(line)
1691 if scalex:
1692     self.\_request_autoscale_view("x")

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\matplotlib\\axes_base.py:2304, in \_AxesBase.add_line(self, line)
2301 if line.get_clip_path() is None:
2302     line.set_clip_path(self.patch)
\-\> 2304 self.\_update_line_limits(line)
2305 if not line.get_label():
2306     line.set_label(f'\_child{len(self.\_children)}')

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\matplotlib\\axes_base.py:2327, in \_AxesBase.\_update_line_limits(self, line)
2323 def \_update_line_limits(self, line):
2324     """
2325     Figures out the data limit of the given line, updating self.dataLim.
2326     """
\-\> 2327     path = line.get_path()
2328     if path.vertices.size == 0:
2329         return

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\matplotlib\\lines.py:1029, in Line2D.get_path(self)
1027 """Return the `~matplotlib.path.Path` associated with this line."""
1028 if self.\_invalidy or self.\_invalidx:
\-\> 1029     self.recache()
1030 return self.\_path

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\matplotlib\\lines.py:681, in Line2D.recache(self, always)
679     self.\_x_filled = self.\_x.copy()
680     indices = np.arange(len(x))
\--\> 681     self.\_x_filled\[nanmask\] = np.interp(
682         indices\[nanmask\], indices\[\~nanmask\], self.\_x\[\~nanmask\])
683 else:
684     self.\_x_filled = self.\_x

File \<__array_function__ internals\>:200, in interp(\*args, \*\*kwargs)

File \~.conda\\envs\\fondamenti-di-automatica\\lib\\site-packages\\numpy\\lib\\function_base.py:1595, in interp(x, xp, fp, left, right, period)
1592     xp = np.concatenate((xp\[-1:\]-period, xp, xp\[0:1\]+period))
1593     fp = np.concatenate((fp\[-1:\], fp, fp\[0:1\]))
\-\> 1595 return interp_func(x, xp, fp, left, right)

 
ValueError: array of sample points is empty

введите здесь описание изображения

введите здесь описание изображения

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обнаружил, что проблема заключается в ошибке в версии 3.7.0 matplotlib. Я установил версию 3.5.3 и теперь она работает хорошо. Чтобы установить эту версию для вашего ноутбука Jupyter, откройте терминал anaconda и введите:

conda install matplotlib=3.5.3

Другие вопросы по теме