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 шт):
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 ситуация в целом не изменилась. Добавлено лишь дополнительное импортирование на случай проверки типов, что не играет роли при штатном использовании библиотеки.
Вот пример:
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()