Есть код к решению задачи:
Составьте программу для получения на экране произвольного изображения, содержащего линии, прямоугольники, окружности, эллипсы, многоугольники. Выполнить закрашивание некоторых из полученных замкнутых областей. Предусмотрите вывод текста.
Код:
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'
-
Уже вижу ошибку в самой первой строке: отступ. Текст ошибки можно было бы и показать. Здесь не телепаты. Зачем тут модуль numpy? Использование matplotlib не запрещено, но выглядит слишом заумно. Произвольность изображения тоже вызывает сомнения. Теперь по поводу "ничего не работает". Это кусок программы в лучшем случае, а не автономный исполняемый скрипт.Fox Fox– Fox Fox2025年02月10日 17:51:32 +00:00Commented 10 февр. 2025 в 17:51
-
1ellipse = plt.Ellipse((0.4, 0.7), 0.2, 0.1, color='orange') ^^^^^^^^^^^ AttributeError: module 'matplotlib.pyplot' has no attribute 'Ellipse'Вероника– Вероника2025年02月10日 18:06:06 +00:00Commented 10 февр. 2025 в 18:06
2 ответа 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 ситуация в целом не изменилась. Добавлено лишь дополнительное импортирование на случай проверки типов, что не играет роли при штатном использовании библиотеки.
-
"...импортирует и делает доступными через точку только четыре геометрические фигуры из модуля patches..." - ?Fox Fox– Fox Fox2025年02月10日 20:06:23 +00:00Commented 10 февр. 2025 в 20:06
-
1@FoxFox Это вопрос или предложение улучшить формулировку? Если второе, буду рад услышать ваш вариант.Vitalizzare– Vitalizzare2025年02月10日 20:08:38 +00:00Commented 10 февр. 2025 в 20:08
-
Вы очень уверенно заявили, что только четыре фигуры... Ниже мой пример, там уже 5. Я посмотрел документацию, там похоже ещё больше.Fox Fox– Fox Fox2025年02月10日 20:19:45 +00:00Commented 10 февр. 2025 в 20:19
-
1@FoxFox В модуше
patchesбольше чем 5 объектов. Речь идет о тех, которые представлены непосредственно вpyplotи могут быть извлечены какpyplot.Something. Таких было и пока остается 4.Vitalizzare– Vitalizzare2025年02月10日 20:45:11 +00:00Commented 10 февр. 2025 в 20:45 -
1@FoxFox Да, это об одном и том же:
pyplot- это модуль. Внутри модуля есть строка импорта классов из модуляpatches, благодаря которой мы можем использовать их напрямую, напримерpyplot.Rectangleвместоmatplotlib.patches.Rectangle.Vitalizzare– Vitalizzare2025年02月10日 20:57:44 +00:00Commented 10 февр. 2025 в 20:57
Вот пример:
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()
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопрос