@jeanrjc's solution почти достанется вам, но добавляет совершенно ненужный белый треугольник, который также спрячет другие объекты (см. рисунок ниже, версия 1).
Это более простой подход, который только добавляет многоугольник дуги:
В основном мы создаем ряд точек (points
) по краю окружности (от theta1
до theta2
). Этого уже достаточно, так как мы можем установить флаг close
в конструкторе Polygon
, который добавит линию от последней к первой точке (создавая замкнутую дугу).
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
def arc_patch(center, radius, theta1, theta2, ax=None, resolution=50, **kwargs):
# make sure ax is not empty
if ax is None:
ax = plt.gca()
# generate the points
theta = np.linspace(np.radians(theta1), np.radians(theta2), resolution)
points = np.vstack((radius*np.cos(theta) + center[0],
radius*np.sin(theta) + center[1]))
# build the polygon and add it to the axes
poly = mpatches.Polygon(points.T, closed=True, **kwargs)
ax.add_patch(poly)
return poly
А потом применить его:
fig, ax = plt.subplots(1,2)
# @jeanrjc solution, which might hide other objects in your plot
ax[0].plot([-1,1],[1,-1], 'r', zorder = -10)
filled_arc((0.,0.3), 1, 90, 180, ax[0], 'blue')
ax[0].set_title('version 1')
# simpler approach, which really is just the arc
ax[1].plot([-1,1],[1,-1], 'r', zorder = -10)
arc_patch((0.,0.3), 1, 90, 180, ax=ax[1], fill=True, color='blue')
ax[1].set_title('version 2')
# axis settings
for a in ax:
a.set_aspect('equal')
a.set_xlim(-1.5, 1.5)
a.set_ylim(-1.5, 1.5)
plt.show()
Результат (версия 2):
Просто любопытно, почему downvote ?! Как это не касается вопроса? – hitzg
Ну, я не спустил вниз. Я очень доволен, что вам удастся улучшить свое решение, хотя, если бы вы могли подробно рассказать о том, как вы заполняете «очки», было бы еще лучше. Кстати, если вы отклонили мой ответ, я не вижу причин. – jrjc
Нет, я не сделал нисходящего творения, на самом деле я собираюсь его продвигать. Ваше решение тоже приятно, мне нравится, что вы смогли использовать существующую функциональность (клин). Был кто-то еще на нисходящем волнении (без видимой причины). Что касается населения «точек», вы правы, я сделаю эту часть проще. – hitzg