matplotlib.path
Модуль для работы с ломанными линиями, используемыми в Matplotlib.
Основной класс для работы с ломанными линиями в Matplotlib — Path. Почти все операции векторной графики используют Path на каком-либо этапе построения изображения.
Хотя экземпляр Path сам по себе нельзя отобразить, некоторые подклассы Artist, такие как PathPatch и PathCollection, можно использовать для удобной визуализации объектов Path.
- classmatplotlib.path.Path(vertices, codes=None, _interpolation_steps=1, closed=False, readonly=False)[источник]
-
Базовые классы:
objectПоследовательность, возможно несвязанных и замкнутых, отрезков линий и кривых.
Базовое хранилище состоит из двух параллельных массивов numpy:
- vertices: массив вершин с плавающей точкой размером (N, 2)
-
codes: массив кодов пути длиной N типа
numpy.uint8или None
Эти два массива всегда имеют одинаковую длину по первому измерению. Например, чтобы представить кубическую кривую, необходимо задать три вершины и три кода
CURVE4.Типы кодов:
-
-
STOP1 вершина (игнорируется) -
Маркер конца всего пути (в настоящее время не требуется и игнорируется)
-
-
-
MOVETO1 вершина -
Поднять перо и переместить его к заданной вершине.
-
-
-
LINETO1 вершина -
Нарисовать линию от текущего положения до заданной вершины.
-
-
-
CURVE31 контрольная точка, 1 конечная точка -
Нарисовать квадратичную кривую Безье от текущего положения до заданной конечной точки через заданную контрольную точку.
-
-
-
CURVE42 контрольные точки, 1 конечная точка -
Нарисовать кубическую кривую Безье от текущего положения до заданной конечной точки через заданные контрольные точки.
-
-
-
CLOSEPOLY1 вершина (игнорируется) -
Нарисовать отрезок до начальной точки текущей ломаной.
-
Если codes равно None, оно интерпретируется как
MOVETO, за которым следует последовательностьLINETO.Пользователям объектов Path не следует обращаться напрямую к массивам vertices и codes. Вместо этого для получения пар «вершина/код» следует использовать
iter_segmentsилиcleaned. Это помогает, в частности, единообразно обрабатывать случай, когда codes равно None.На некоторые особенности поведения объектов Path можно влиять с помощью rcParams. См. параметры rcParams, ключи которых начинаются с 'path.'.
Примечание
Массивы vertices и codes следует считать неизменяемыми: в конструкторе заранее применяются различные оптимизации и предположения, которые не будут пересмотрены при изменении данных.
Создать новый путь с заданными вершинами и кодами.
- Параметры:
-
- verticesмассивоподобный объект размером (N, 2)
-
Вершины пути в виде массива, маскированного массива или последовательности пар. Маскированные значения, если они есть, будут преобразованы в NaN, которые корректно обрабатываются итератором Agg PathIterator и другими потребителями данных пути, например
iter_segments(). - codesмассивоподобный объект или None, необязательно
-
Массив целых чисел длиной N, представляющих коды пути. Если значение не None, длина codes должна совпадать с длиной vertices. Если значение None, vertices будут рассматриваться как последовательность отрезков линии.
- _interpolation_stepsint, необязательно
-
Используется как подсказка для некоторых проекций, например полярной, о том, что этот путь следует линейно интерполировать непосредственно перед отрисовкой. Этот атрибут предназначен главным образом для внутренней реализации и не рассчитан на публичное использование.
- closedbool, необязательно
-
Если codes равно None и closed равно True, vertices будут рассматриваться как отрезки линий замкнутого многоугольника. Обратите внимание, что последняя вершина будет проигнорирована (так как соответствующий код будет установлен в
CLOSEPOLY). - readonlybool, необязательно
-
Заставляет путь вести себя как неизменяемый объект и устанавливает для массивов vertices и codes режим «только для чтения».
- CLOSEPOLY=np.uint8(79)
- CURVE3=np.uint8(3)
- CURVE4=np.uint8(4)
- LINETO=np.uint8(2)
- MOVETO=np.uint8(1)
- NUM_VERTICES_FOR_CODE={np.uint8(0): 1, np.uint8(1): 1, np.uint8(2): 1, np.uint8(3): 2, np.uint8(4): 3, np.uint8(79): 1}
-
Словарь, сопоставляющий коды Path с ожидаемым для каждого кода количеством вершин.
- STOP=np.uint8(0)
- classmethodarc(theta1, theta2, n=None, is_wedge=False)[исходный код]
-
Вернуть
Pathдля дуги единичной окружности от угла theta1 до угла theta2 (в градусах).Угол theta2 приводится к значению, задающему кратчайшую дугу в пределах 360 градусов. То есть, если theta2 > theta1 + 360, дуга будет проходить от theta1 до theta2 - 360, а не образовывать полный круг с дополнительным перекрытием.
Если задано n, оно обозначает количество сегментов сплайна. Если n не задано, количество сегментов сплайна определяется на основе разницы между theta1 и theta2.
Masionobe, L. 2003. Построение дуги эллипса с помощью ломаных, квадратичных или кубических кривых Безье.
- classmethodcircle(center=(0.0, 0.0), radius=1.0, readonly=False)[исходный код]
-
Вернуть
Path, представляющий окружность с заданными радиусом и центром.- Параметры:
-
- center(float, float), по умолчанию: (0, 0)
-
Центр окружности.
- radiusfloat, по умолчанию: 1
-
Радиус окружности.
- readonlybool
-
Следует ли при создании экземпляра Path установить аргумент "readonly".
Примечания
Окружность аппроксимируется с помощью 8 кубических кривых Безье, как описано в работе
Lancaster, Don. Аппроксимация окружности или эллипса с помощью четырёх кубических сплайнов Безье.
- cleaned(transform=None, remove_nans=False, clip=None, *, simplify=False, curves=False, stroke_width=1.0, snap=False, sketch=None)[исходный код]
-
Вернуть новый
Pathс вершинами и кодами, очищенными в соответствии с параметрами.См. также
Path.iter_segments-
подробное описание аргументов-ключевых слов.
- clip_to_bbox(bbox, inside=True)[исходный код]
-
Обрезать путь по заданной ограничивающей рамке.
Путь должен состоять из одного или нескольких замкнутых многоугольников. Этот алгоритм некорректно работает с незамкнутыми путями.
Если inside равно
True, обрезка выполняется по внутренней области рамки, в противном случае — по внешней.
- code_type
-
псевдоним
uint8
- propertycodes
-
Список кодов в
Pathв виде одномерного массива.Каждый код является одним из следующих:
STOP,MOVETO,LINETO,CURVE3,CURVE4илиCLOSEPOLY. Для кодов, соответствующих нескольким вершинам (CURVE3иCURVE4), код повторяется, чтобы длиныverticesиcodesвсегда совпадали.
- contains_path(path, transform=None)[исходный код]
-
Вернуть значение, указывающее, полностью ли этот (замкнутый) путь содержит заданный путь.
Если transform не равен
None, перед проверкой вхождения путь будет преобразован.
- contains_point(point, transform=None, radius=0.0)[исходный код]
-
Вернуть значение, указывающее, содержит ли область, ограниченная путём, заданную точку.
Путь всегда считается замкнутым; то есть, если последний код не
CLOSEPOLY, предполагается наличие неявного отрезка, соединяющего последнюю вершину с первой.- Параметры:
-
- point(float, float)
-
Проверяемая точка (x, y).
-
transform
Transform, необязательно -
Если значение не
None, point будет сравниваться сself, преобразованным с помощью transform; то есть для корректной проверки transform должен преобразовывать путь в систему координат point. - radiusfloat, по умолчанию: 0
-
Дополнительный отступ пути в координатах point. Путь тангенциально расширяется на radius/2; то есть если нарисовать путь линией шириной radius, все точки на линии по-прежнему будут считаться принадлежащими этой области. И наоборот, отрицательные значения сужают область: точки на воображаемой линии будут считаться находящимися за её пределами.
- Возвращает:
-
- bool
Примечания
Текущий алгоритм имеет ряд ограничений:
- Результат не определён для точек, лежащих точно на границе (то есть на пути, смещённом на radius/2).
- Результат не определён, если ограниченная область отсутствует, то есть все вершины лежат на одной прямой.
- Если ограничивающие линии начинают пересекаться из-за смещения на radius, корректность результата не гарантируется.
- contains_points(points, transform=None, radius=0.0)[исходный код]
-
Вернуть значение, указывающее, содержит ли область, ограниченная путём, заданные точки.
Путь всегда считается замкнутым; то есть, если последний код не
CLOSEPOLY, предполагается наличие неявного отрезка, соединяющего последнюю вершину с первой.- Параметры:
-
- pointsмассив размером (N, 2)
-
Проверяемые точки. Столбцы содержат значения x и y.
-
transform
Transform, необязательно -
Если значение не
None, points будут сравниваться сself, преобразованным с помощью transform; то есть для корректной проверки transform должен преобразовывать путь в систему координат points. - radiusfloat, по умолчанию: 0
-
Дополнительный отступ пути в координатах points. Путь тангенциально расширяется на radius/2; то есть если нарисовать путь линией шириной radius, все точки на линии по-прежнему будут считаться принадлежащими этой области. И наоборот, отрицательные значения сужают область: точки на воображаемой линии будут считаться находящимися за её пределами.
- Возвращает:
-
- массив bool длиной N
Примечания
Текущий алгоритм имеет ряд ограничений:
- Результат не определён для точек, лежащих точно на границе (то есть на пути, смещённом на radius/2).
- Результат не определён, если ограниченная область отсутствует, то есть все вершины лежат на одной прямой.
- Если ограничивающие линии начинают пересекаться из-за смещения на radius, корректность результата не гарантируется.
- copy()[исходный код]
-
Вернуть поверхностную копию
Path, которая будет использовать те же массивы vertices и codes, что и исходныйPath.
- deepcopy(memo=None)[исходный код]
-
Вернуть глубокую копию
Path.Pathне будет доступен только для чтения, даже если исходныйPathдоступен только для чтения.- Параметры:
-
- memodict, необязательно
-
Словарь для кэширования, передаваемый в
copy.deepcopy.
- Возвращает:
-
- Path
-
Глубокая копия
Path, не доступная только для чтения.
- get_extents(transform=None, **kwargs)[исходный код]
-
Получить ограничивающую рамку пути (Bbox).
- Параметры:
-
-
transform
Transform, необязательно -
Преобразование, применяемое к пути перед вычислением границ, если задано.
- **kwargs
-
Передаются в
iter_bezier.
-
transform
- Возвращает:
-
- matplotlib.transforms.Bbox
-
Границы пути Bbox([[xmin, ymin], [xmax, ymax]])
- statichatch(hatchpattern, density=6)[исходный код]
-
По заданному обозначению штриховки hatchpattern создать
Path, который можно использовать для повторяющегося узора штриховки. density — количество линий на единицу площади.
- interpolated(steps)[исходный код]
-
Вернуть новый путь, разделив каждый сегмент на steps частей.
Коды, отличные от
LINETO,MOVETOиCLOSEPOLY, обрабатываются некорректно.- Параметры:
-
- stepsint
-
Количество сегментов в новом пути для каждого сегмента исходного пути.
- Возвращает:
-
- Path
-
Интерполированный путь.
- intersects_bbox(bbox, filled=True)[исходный код]
-
Вернуть значение, указывающее, пересекается ли этот путь с заданной
Bbox.Если filled равно True, метод также вернёт True, если путь полностью охватывает
Bbox(то есть путь считается заполненным).Ограничивающая рамка всегда считается заполненной.
- intersects_path(other, filled=True)[исходный код]
-
Вернуть значение, указывающее, пересекается ли этот путь с другим заданным путём.
Если filled равно True, метод также вернёт True, если один путь полностью охватывает другой (то есть пути считаются заполненными).
- iter_bezier(**kwargs)[исходный код]
-
Перебирает каждую кривую Безье (включая линии) в объекте
Path.- Параметры:
-
- **kwargs
-
Передаются в
iter_segments.
- Возвращает:
-
-
B
BezierSegment -
Кривые Безье, составляющие текущий путь. Обратите особое внимание: отдельные точки являются кривыми Безье порядка 0, а линии — кривыми Безье порядка 1 (с двумя контрольными точками).
-
code
code_type -
Код, описывающий тип возвращаемой кривой.
MOVETO,LINETO,CURVE3иCURVE4соответствуют кривым Безье с 1, 2, 3 и 4 контрольными точками соответственно.CLOSEPOLY— этоLINETOс контрольными точками, корректно выбранными на основе начальной и конечной точек текущего штриха.
-
B
- iter_segments(transform=None, remove_nans=True, clip=None, snap=False, stroke_width=1.0, simplify=None, curves=True, sketch=None)[исходный код]
-
Перебирает все сегменты кривых в пути.
При каждой итерации возвращается пара
(vertices, code), гдеvertices— последовательность из 1–3 пар координат, аcode— кодPath.Кроме того, этот метод может выполнять над путем ряд стандартных операций очистки и преобразований.
- Параметры:
-
-
transformNone или
Transform -
Если значение не равно None, к пути будет применено указанное аффинное преобразование.
- remove_nansbool, необязательный
-
Нужно ли удалять из пути все значения NaN и пропускать их с помощью команд MOVETO.
- clipNone или (float, float, float, float), необязательный
-
Если значение не равно None, должно быть задано 4-кортежем (x1, y1, x2, y2), определяющим прямоугольник, которым обрезается путь.
- snapNone или bool, необязательный
-
Если True, привязать все узлы к пикселям; если False — не привязывать. Если None, привязка выполняется, когда путь содержит только сегменты, параллельные осям x или y, и их не более 1024.
- stroke_widthfloat, необязательный
-
Ширина рисуемого штриха (используется для привязки пути).
- simplifyNone или bool, необязательный
-
Нужно ли упрощать путь, удаляя вершины, не влияющие на его вид. Если значение равно None, используется атрибут
should_simplify. См. такжеrcParams["path.simplify"](по умолчанию:True) иrcParams["path.simplify_threshold"](по умолчанию:0.111111111111). - curvesbool, необязательный
-
Если True, сегменты кривых возвращаются как сегменты кривых. Если False, все кривые преобразуются в отрезки.
- sketchNone или последовательность, необязательный
-
Если значение не равно None, должно быть задано 3-кортежем вида (scale, length, randomness), представляющим параметры эскиза.
-
transformNone или
- classmethodmake_compound_path(*args)[исходный код]
-
Объединяет список объектов
Pathв один объектPath, удаляя всеSTOP.
- classmethodmake_compound_path_from_polys(XY)[исходный код]
-
Создает составной объект
Pathдля рисования нескольких многоугольников с одинаковым числом сторон.(
Source code,2x.png,png)- Параметры:
-
- XYмассив (numpolys, numsides, 2)
- propertyshould_simplify
-
True, если массив вершин следует упростить.
- propertysimplify_threshold
-
Доля пикселя, ниже которой вершины будут удалены при упрощении.
- to_polygons(transform=None, width=0, height=0, closed_only=True)[исходный код]
-
Преобразует этот путь в список многоугольников или ломаных. Каждый многоугольник/ломаная представляет собой массив вершин размером (N, 2). Иными словами, в каждом многоугольнике нет инструкций
MOVETOи кривых. Это полезно для отображения в бэкендах, не поддерживающих составные пути или кривые Безье.Если значения width и height оба не равны нулю, линии будут упрощены, а вершины за пределами (0, 0), (width, height) будут обрезаны.
Результирующие многоугольники будут упрощены, если атрибут
Path.should_simplifyпути имеет значениеTrue.Если closed_only равно
True(по умолчанию), возвращаются только замкнутые многоугольники, у которых последняя точка совпадает с первой. Все незамкнутые ломаные в пути будут замкнуты явно. Если closed_only равноFalse, незамкнутые многоугольники в пути возвращаются незамкнутыми, а замкнутые многоугольники замыкаются явным образом: последняя точка устанавливается равной первой.
- transformed(transform)[исходный код]
-
Возвращает преобразованную копию пути.
См. также
matplotlib.transforms.TransformedPath-
Специализированный класс пути, который кэширует результат преобразования и автоматически обновляет его при изменении преобразования.
- classmethodunit_circle()[исходный код]
-
Возвращает доступный только для чтения объект
Pathединичной окружности.В большинстве случаев вам подойдет
Path.circle().
- classmethodunit_circle_righthalf()[исходный код]
-
Возвращает объект
Pathдля правой половины единичной окружности.Описание используемого приближения см. в
Path.circle.
- classmethodunit_rectangle()[исходный код]
-
Возвращает экземпляр
Pathдля единичного прямоугольника от (0, 0) до (1, 1).
- classmethodunit_regular_asterisk(numVertices)[исходный код]
-
Возвращает объект
Pathдля единичной правильной звездочки с указанным числом вершин и радиусом 1.0, центрированной в точке (0, 0).
- classmethodunit_regular_polygon(numVertices)[исходный код]
-
Возвращает экземпляр
Pathдля единичного правильного многоугольника с указанным numVertices, описанная окружность которого имеет радиус 1.0 и центр находится в точке (0, 0).
- classmethodunit_regular_star(numVertices, innerCircle=0.5)[исходный код]
-
Возвращает объект
Pathдля единичной правильной звезды с указанным числом вершин и радиусом 1.0, центрированной в точке (0, 0).
- propertyvertices
-
Вершины объекта
Pathв виде массива (N, 2).
- classmethodwedge(theta1, theta2, n=None)[исходный код]
-
Возвращает объект
Pathдля сектора единичной окружности от угла theta1 до угла theta2 (в градусах).Значение theta2 приводится к диапазону, обеспечивающему сектор наименьшей величины в пределах 360 градусов. То есть, если theta2 > theta1 + 360, сектор строится от theta1 до theta2 - 360, а не как полная окружность с дополнительным наложением.
Если задано значение n, оно определяет число сегментов сплайна. Если n не задано, число сегментов сплайна определяется на основе разности между theta1 и theta2.
Описание используемого приближения см. в
Path.arc.
- matplotlib.path.get_path_collection_extents(master_transform, paths, transforms, offsets, offset_transform)[исходный код]
-
Получает ограничивающую рамку внутренних объектов
PathCollection.То есть принимает последовательность объектов
Path, объектовTransformи смещений, как вPathCollection, и возвращает ограничивающую рамку, охватывающую их все.- Параметры:
-
-
master_transform
Transform -
Глобальное преобразование, применяемое ко всем путям.
-
pathsсписок объектов
Path -
transformsсписок объектов
Affine2DBase -
Если список не пуст, он переопределяет master_transform.
- offsetsподобный массиву объект формы (N, 2)
-
offset_transform
Affine2DBase -
Преобразование, применяемое к смещениям перед смещением пути.
-
master_transform
Примечания
Способ объединения paths, transforms и offsets такой же, как и для коллекций: каждый элемент перебирается независимо. Например, если имеются 3 пути (A, B, C), 2 преобразования (α, β) и 1 смещение (O), получаются следующие комбинации:
- (A, α, O)
- (B, β, O)
- (C, α, O)
© 2012–2026 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/stable/api/path_api.html