matplotlib.patches.Arc
- class
matplotlib.patches.Arc(xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs)[source] -
Bases:
matplotlib.patches.EllipseЭллиптическая дуга, т.е. отрезок эллипса.
Из-за внутренних оптимизаций существуют определенные ограничения при использовании Arc:
- Дугу нельзя заполнить.
- Дуга должна использоваться в экземпляре
Axes. Ее нельзя добавлять непосредственно вFigure, так как она оптимизирована для рендеринга только тех отрезков, которые находятся внутри области осей с высоким разрешением.
Параметры: - xy(float, float)
-
Центр эллипса.
- widthfloat
-
Длина горизонтальной оси.
- heightfloat
-
Длина вертикальной оси.
- anglefloat
-
Поворот эллипса в градусах (против часовой стрелки).
- theta1, theta2float, по умолчанию: 0, 360
-
Начальный и конечный углы дуги в градусах. Эти значения относительны к angle, например, если angle = 45 и theta1 = 90, то абсолютный начальный угол равен 135. По умолчанию theta1 = 0, theta2 = 360, т.е. полный эллипс. Дуга рисуется против часовой стрелки. Углы, большие или равные 360, или меньшие 0, представлены эквивалентным углом в диапазоне [0, 360), взятым по модулю 360 от входного значения.
Другие параметры: -
**kwargs
Patchсвойства -
Большинство свойств
Patchподдерживаются в качестве ключевых аргументов, за исключением fill и facecolor, так как заполнение не поддерживается.Свойство Описание agg_filterфункция фильтра, которая принимает (m, n, 3) массив float и значение dpi и возвращает (m, n, 3) массив alphaскаляр или None animatedbool antialiasedили aaнеизвестно capstyleCapStyleили {'butt', 'projecting', 'round'}clip_boxBboxclip_onbool clip_pathPatch или (Path, Transform) или None colorцвет containsнеизвестно edgecolorили ecцвет или None или 'auto' facecolorили fcцвет или None figureFigurefillbool gidстрока hatch{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'} in_layoutbool joinstyleJoinStyleили {'miter', 'round', 'bevel'}labelобъект linestyleили ls{'-', '--', '-.', ':', '', (offset, on-off-seq), ...} linewidthили lwчисло с плавающей точкой или None path_effectsAbstractPathEffectpickerNone или bool или число с плавающей точкой или вызываемый объект rasterizedbool sketch_params(масштаб: float, длина: float, случайность: float) snapbool или None transformTransformurlстрока visiblebool zorderчисло с плавающей точкой
-
__init__(xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs)[source] -
Параметры: - xy(float, float)
-
Центр эллипса.
- widthfloat
-
Длина горизонтальной оси.
- heightfloat
-
Длина вертикальной оси.
- anglefloat
-
Поворот эллипса в градусах (против часовой стрелки).
- theta1, theta2float, по умолчанию: 0, 360
-
Начальный и конечный углы дуги в градусах. Эти значения относятся к angle, например, если angle = 45 и theta1 = 90, абсолютный начальный угол составляет 135. По умолчанию theta1 = 0, theta2 = 360, т.е. полный эллипс. Дуга рисуется против часовой стрелки. Углы, большие или равные 360 или меньшие 0, представлены эквивалентным углом в диапазоне [0, 360), взятым по модулю 360 от входного значения.
Другие параметры: -
**kwargs
Patchсвойства -
Большинство свойств
Patchподдерживаются в качестве ключевых аргументов, за исключением fill и facecolor, поскольку заполнение не поддерживается.Свойство Описание agg_filterфункция фильтра, которая принимает (m, n, 3) массив с плавающей точкой и значение dpi, и возвращает (m, n, 3) массив alphaскаляр или None animatedbool antialiasedили aaнеизвестно capstyleCapStyleили {'butt', 'projecting', 'round'}clip_boxBboxclip_onbool clip_pathPatch или (Path, Transform) или None colorцвет containsнеизвестно edgecolorили ecцвет или None или 'auto' facecolorили fcцвет или None figureFigurefillbool gidстрока hatch{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'} in_layoutbool joinstyleJoinStyleили {'miter', 'round', 'bevel'}labelобъект linestyleили ls{'-', '--', '-.', ':', '', (смещение, последовательность включения-выключения), ...} linewidthили lwfloat или None path_effectsAbstractPathEffectpickerNone или bool или float или вызываемый объект rasterizedbool sketch_params(масштаб: float, длина: float, случайность: float) snapbool или None transformTransformurlстрока visiblebool zorderfloat
-
__module__= 'matplotlib.patches'
-
__str__()[source] -
Возвращает str(self).
-
-
draw(renderer)[source] -
Отрисовка дуги на заданном renderer.
Примечания
Эллипсы обычно отрисовываются с использованием приближения, в котором используются восемь кубических сплайнов Безье. Погрешность этого приближения составляет 1,89818e-6, согласно этому неподтвержденному источнику:
Lancaster, Don. Приближение окружности или эллипса с использованием четырех кубических сплайнов Безье.
https://www.tinaja.com/glib/ellipse4.pdf
Существует случай, когда очень большие эллипсы необходимо отрисовывать с высокой точностью, а отрисовка всего эллипса достаточным количеством сегментов (либо сплайнами, либо отрезками прямых) слишком затратна. Поэтому в случае, когда любой из радиусов эллипса достаточно велик, чтобы погрешность приближения сплайном была видна (больше одного пикселя отклонения от идеала), используется другой метод.
В этом случае отрисовываются только видимые части эллипса, причем каждая видимая дуга использует фиксированное количество сегментов сплайна (8). Алгоритм работает следующим образом:
-
Определяются точки пересечения эллипса с ограничивающей рамкой осей координат. (Это делается путем выполнения обратного преобразования ограничивающей рамки осей координат таким образом, чтобы она относилась к единичной окружности - это делает вычисление пересечения намного проще, чем прямое вычисление пересечения вращающегося эллипса).
При этом используется алгоритм "линии, пересекающей окружность" из:
Vince, John. Геометрия для компьютерной графики: формулы, примеры и доказательства. Лондон: Springer-Verlag, 2005.
- Вычисляются углы каждой из точек пересечения.
- Проходя против часовой стрелки, начиная с положительного направления оси x, каждая из видимых дуговых сегментов между парами вершин отрисовывается с использованием метода приближения дуги Безье, реализованного в
Path.arc.
-
-
Примеры использования matplotlib.patches.Arc
© 2012–2021 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.4.3/api/_as_gen/matplotlib.patches.Arc.html