matplotlib: ошибка AttributeError: module 'matplotlib.pyplot' has no attribute 'Ellipse'

Есть код к решению задачи:

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

Код:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

# Линии
ax.plot([0, 1], [0, 1], 'r-', linewidth=2)  # Красная линия
ax.plot([1, 0], [0, 1], 'g--', linewidth=2)  # Зеленая пунктирная

# Прямоугольник
rect = plt.Rectangle((0.2, 0.2), 0.3, 0.4, color='blue', alpha=0.5)
ax.add_patch(rect)

# Окружность
circle = plt.Circle((0.7, 0.5), 0.1, color='purple', fill=True)
ax.add_patch(circle)

# Эллипс
ellipse = plt.Ellipse((0.4, 0.7), 0.2, 0.1, color='orange')
ax.add_patch(ellipse)

# Многоугольник
polygon = plt.Polygon([[0.5, 0.2], [0.6, 0.4], [0.7, 0.2]], color='cyan')
ax.add_patch(polygon)

# Текст
ax.text(0.3, 0.9, 'Научная графика', fontsize=12, color='black')

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_xticks([])
ax.set_yticks([])
plt.show()

Выдает ошибку:

ellipse = plt.Ellipse((0.4, 0.7), 0.2, 0.1, color='orange')
          ^^^^^^^^^^^ 
AttributeError: module 'matplotlib.pyplot' has no attribute 'Ellipse'  

Ответы (2 шт):

Автор решения: Vitalizzare

matplotlib 3.7.2

Модуль pyplot библиотеки matplotlib импортирует и делает доступными через точку только четыре геометрические фигуры из модуля patches: Polygon, Rectangle, Circle, Arrow. Все остальные нужно импортировать самостоятельно:

from matplotlib.patches import Ellipse
plt.gca().add_patch(Ellipse((0.4, 0.7), 0.2, 0.1, color='orange'))

Здесь:

  • plt.gca() - взять текущую систему координат
  • add_patch - добавить геометрическую фигуру в систему координат

p.s. В версии 3.10.x ситуация в целом не изменилась. Добавлено лишь дополнительное импортирование на случай проверки типов, что не играет роли при штатном использовании библиотеки.

→ Ссылка
Автор решения: Fox Fox

Вот пример:

import matplotlib.pyplot
import matplotlib.patches

# Создаем фигуру и оси
fig, ax = matplotlib.pyplot.subplots()

# Добавляем эллипс
ellipse = matplotlib.patches.Ellipse((0.5, 0.5), width=0.4, height=0.2, angle=0, edgecolor='r', facecolor='yellow')
ax.add_patch(ellipse)

# Добавляем окружность
circle = matplotlib.patches.Circle((0.3, 0.7), radius=0.1, edgecolor='b', facecolor='blue')
ax.add_patch(circle)

# Добавляем треугольник
triangle = matplotlib.patches.Polygon([[0.6, 0.2], [0.8, 0.2], [0.7, 0.4]], edgecolor='g', facecolor='green')
ax.add_patch(triangle)

# Добавляем прямоугольник
rectangle = matplotlib.patches.Rectangle((0.1, 0.1), width=0.2, height=0.3, edgecolor='purple', facecolor='pink')
ax.add_patch(rectangle)

# Добавляем шестиугольник
hexagon = matplotlib.patches.RegularPolygon((0.8, 0.8), numVertices=6, radius=0.1, edgecolor='orange', facecolor='cyan')
ax.add_patch(hexagon)

# Устанавливаем лимиты осей
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

# Показываем диаграмму
matplotlib.pyplot.show()
→ Ссылка