matplotlib.path
Модуль для работы с полилиниями, используемыми в Matplotlib.
Основной класс для обработки полилиний в Matplotlib — Path. Практически все векторное рисование использует Path на каком-то этапе процесса отрисовки.
Хотя сам экземпляр Path не может быть нарисован, некоторые подклассы Artist, такие как PathPatch и PathCollection, могут использоваться для удобной визуализации Path.
- classmatplotlib.path.Path(vertices, codes=None, _interpolation_steps=1, closed=False, readonly=False)[source]
-
Базы:
objectПоследовательность, возможно, несвязанных, возможно, замкнутых, линейных и криволинейных сегментов.
В основе хранения лежат две параллельные массива numpy:
- vertices: массив Nx2 с плавающей точкой вершин
- codes: массив uint8 с кодами траектории длины N, или None
Эти два массива всегда имеют одинаковую длину в первом измерении. Например, для представления кубической кривой необходимо предоставить три вершины и три
CURVE4кода.Типы кодов:
-
-
STOP1 вершина (игнорируется) -
Маркер конца всей траектории (в настоящее время не требуется и игнорируется)
-
-
-
MOVETO1 вершина -
Поднять перо и переместиться в заданную вершину.
-
-
-
LINETO1 вершина -
Нарисовать линию от текущей позиции до заданной вершины.
-
-
-
CURVE31 контрольная точка, 1 конечная точка -
Нарисовать квадратичную кривую Безье от текущей позиции, с заданной контрольной точкой, до заданной конечной точки.
-
-
-
CURVE42 контрольные точки, 1 конечная точка -
Нарисовать кубическую кривую Безье от текущей позиции, с заданными контрольными точками, до заданной конечной точки.
-
-
-
CLOSEPOLY1 вершина (игнорируется) -
Нарисовать отрезок линии до начальной точки текущей ломаной.
-
Если codes равно None, то vertices интерпретируется как
MOVETO, за которым следует рядLINETO.Пользователи объектов Path не должны напрямую обращаться к массивам vertices и codes. Вместо этого они должны использовать
iter_segmentsилиcleaned, чтобы получить пары вершина/код. Это особенно полезно для последовательного обработки случая, когда codes равно None.Некоторое поведение объектов Path может быть настроено с помощью rcParams. См. rcParams с ключами, начинающимися с 'path.'.
Примечание
Массивы vertices и codes следует рассматривать как неизменяемые — в конструкторе сделано несколько оптимизаций и предположений, которые не изменятся при изменении данных.
Создаёт новую траекторию с заданными вершинами и кодами.
- Параметры:
-
- vertices(N, 2) array-like
-
Вершины траектории как массив, массив с масками или последовательность пар. Маскированные значения, если таковые имеются, будут преобразованы в NaN, которые затем корректно обрабатываются Agg PathIterator и другими потребителями данных траектории, такими как
iter_segments(). - codesarray-like или None, необязательно
-
N-элементный массив целых чисел, представляющих коды траектории. Если не равно None, коды должны иметь ту же длину, что и вершины. Если None, vertices будут интерпретированы как серия отрезков прямой.
- _interpolation_stepsint, необязательно
-
Используется как подсказка для некоторых проекций, таких как Polar, о том, что эта траектория должна быть линейно интерполирована непосредственно перед отрисовкой. Этот атрибут в первую очередь является деталью реализации и не предназначен для использования в общедоступном коде.
- closedbool, необязательно
-
Если codes равно None и closed равно True, вершины будут интерпретированы как отрезки прямой замкнутого многоугольника. Обратите внимание, что последняя вершина будет затем пропущена (так как соответствующий код будет установлен в CLOSEPOLY).
- readonlybool, необязательно
-
Делает траекторию неизменяемой и устанавливает вершины и коды как массивы только для чтения.
- CLOSEPOLY=79
- CURVE3=3
- CURVE4=4
- LINETO=2
- MOVETO=1
- NUM_VERTICES_FOR_CODE={0: 1, 1: 1, 2: 1, 3: 2, 4: 3, 79: 1}
-
Словарь, сопоставляющий коды Path с количеством вершин, ожидаемых этим кодом.
- STOP=0
- classmethodarc(theta1, theta2, n=None, is_wedge=False)[source]
-
Возвращает
Pathдля дуги единичной окружности от углов theta1 до theta2 (в градусах).theta2 разворачивается для получения кратчайшей дуги в пределах 360 градусов. То есть, если theta2 > theta1 + 360, дуга будет от theta1 до theta2 - 360, а не полная окружность плюс некоторое дополнительное наложение.
Если n указано, оно представляет собой количество сегментов сплайна. Если n не указано, количество сегментов сплайна определяется на основе разницы между theta1 и theta2.
Masionobe, L. 2003. Drawing an elliptical arc using polylines, quadratic or cubic Bezier curves.
- classmethodcircle(center=(0.0, 0.0), radius=1.0, readonly=False)[source]
-
Возвращает
Path, представляющий окружность заданного радиуса и центра.- Параметры:
-
- center(float, float), по умолчанию: (0, 0)
-
Центр окружности.
- radiusfloat, по умолчанию: 1
-
Радиус окружности.
- readonlybool
-
Устанавливает аргумент "только для чтения" при создании объекта Path.
Примечания
Окружность аппроксимируется с помощью 8 кубических кривых Безье, как описано в
Lancaster, Don. Approximating a Circle or an Ellipse Using Four Bezier Cubic Splines.
- cleaned(transform=None, remove_nans=False, clip=None, *, simplify=False, curves=False, stroke_width=1.0, snap=False, sketch=None)[source]
-
Возвращает новую траекторию с очищенными вершинами и кодами в соответствии с параметрами.
См. также
Path.iter_segments-
для подробностей ключевых аргументов.
- clip_to_bbox(bbox, inside=True)[source]
-
Обрезать путь до заданной области.
Путь должен состоять из одного или нескольких замкнутых полигонов. Этот алгоритм не будет работать корректно для незамкнутых путей.
Если inside равно
True, обрезать до внутренней области прямоугольника, в противном случае — до внешней области.
- code_type
-
псевдоним для
uint8
- propertycodes
-
Список кодов в
Pathв виде одномерного массива numpy. Каждый код — один изSTOP,MOVETO,LINETO,CURVE3,CURVE4илиCLOSEPOLY. Для кодов, соответствующих более чем одной вершине (CURVE3иCURVE4), этот код будет повторяться, чтобы длинаverticesиcodesвсегда была одинаковой.
- contains_path(path, transform=None)[source]
-
Возвращает, полностью ли этот (замкнутый) путь содержит заданный путь.
Если transform не
None, путь будет преобразован перед проверкой на включение.
- contains_point(point, transform=None, radius=0.0)[source]
-
Возвращает, содержит ли область, ограниченная путем, заданную точку.
Путь всегда рассматривается как замкнутый; то есть, если последний код не CLOSEPOLY, предполагается неявный сегмент, соединяющий последнюю вершину с первой.
- Параметры:
-
- point(float, float)
-
Точка (x, y) для проверки.
-
transform
matplotlib.transforms.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)[source]
-
Возвращает, содержит ли область, ограниченная путем, заданные точки.
Путь всегда рассматривается как замкнутый; то есть, если последний код не CLOSEPOLY, предполагается неявный сегмент, соединяющий последнюю вершину с первой.
- Параметры:
-
- points(N, 2) массив
-
Точки для проверки. Столбцы содержат значения x и y.
-
transform
matplotlib.transforms.Transform, необязательно -
Если не
None, points будет сравниваться сself, преобразованным с помощью transform; т.е. для правильной проверки transform должен преобразовать путь в систему координат points. - radiusfloat, по умолчанию: 0
-
Добавить дополнительный отступ к пути в координатах points. Путь расширяется по касательной на radius/2; т.е. если вы нарисуете путь с шириной линии radius, все точки на линии все еще будут считаться содержащимися в области. И наоборот, отрицательные значения уменьшают область: Точки на воображаемой линии будут считаться внешними.
- Возвращает:
-
- массив bool длины N
Примечания
У текущего алгоритма есть некоторые ограничения:
- Результат неопределен для точек, точно на границе (т.е. в пути, смещенном на radius/2).
- Результат неопределен, если нет заключенной области, т.е. все вершины находятся на прямой линии.
- Если ограничивающие линии пересекаются друг с другом из-за смещения radius, результат не гарантирован.
- get_extents(transform=None, **kwargs)[source]
-
Получить прямоугольник (Bbox) пути.
- Параметры:
-
- transformmatplotlib.transforms.Transform, необязательно
-
Преобразование, которое нужно применить к пути перед вычислением пределов, если таковое имеется.
- **kwargs
-
Передается в
iter_bezier.
- Возвращает:
-
- matplotlib.transforms.Bbox
-
Прямоугольник (Bbox) пути [[xmin, ymin], [xmax, ymax]]
- statichatch(hatchpattern, density=6)[source]
-
На основе спецификатора штриховки hatchpattern генерирует путь, который можно использовать в повторяющемся узоре штриховки. density — количество линий на единицу площади.
- interpolated(steps)[source]
-
Возвращает новый путь, ресемплированный до длины N x steps.
Коды, отличные от LINETO, не обрабатываются корректно.
- intersects_bbox(bbox, filled=True)[source]
-
Возвращает, пересекается ли данный путь с заданным
Bbox.Если filled равно True, то это также возвращает True, если путь полностью включает в себя
Bbox(т.е. путь рассматривается как заполненный).Прямоугольник (Bbox) всегда считается заполненным.
- intersects_path(other, filled=True)[source]
-
Возвращает, пересекается ли данный путь с другим заданным путем.
Если filled равно True, то это также возвращает True, если один путь полностью включает в себя другой (т.е. пути рассматриваются как заполненные).
- iter_bezier(**kwargs)[source]
-
Итерация по каждой кривой Безье (включая линии) в пути.
- Параметры:
-
- **kwargs
-
Передается в
iter_segments.
- Возвращает:
-
- Bmatplotlib.bezier.BezierSegment
-
Кривые Безье, составляющие текущий путь. Обратите особое внимание на то, что отдельные точки являются кривыми Безье нулевого порядка, а линии — кривыми Безье первого порядка (с двумя узловыми точками).
- codePath.code_type
-
Код, описывающий тип возвращаемой кривой. Path.MOVETO, Path.LINETO, Path.CURVE3, Path.CURVE4 соответствуют кривым Безье с 1, 2, 3 и 4 узловыми точками (соответственно). Path.CLOSEPOLY является Path.LINETO с узловыми точками, правильно выбранными на основе начальных/конечных точек текущего штриха.
- iter_segments(transform=None, remove_nans=True, clip=None, snap=False, stroke_width=1.0, simplify=None, curves=True, sketch=None)[source]
-
Итерация по всем сегментам кривых в пути.
Каждая итерация возвращает пару
(vertices, code), гдеvertices— последовательность из 1–3 пар координат, аcode— кодPath.Кроме того, этот метод может предоставить ряд стандартных очисток и преобразований пути.
- Параметры:
-
-
transformNone или
Transform -
Если не None, заданное аффинное преобразование будет применено к пути.
- remove_nansbool, необязательно
-
Удалить все NaN из пути и пропустить их с помощью команд MOVETO.
- clipNone или (float, float, float, float), необязательно
-
Если не None, должно быть четвёркой (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, должно быть тройкой вида (scale, length, randomness), представляющей параметры построения эскиза.
-
transformNone или
- classmethodmake_compound_path_from_polys(XY)[source]
-
Создайте объект составного пути для рисования нескольких полигонов с одинаковым количеством сторон. XY — это массив NumPy (numpolys x numsides x 2) вершин. Возвращаемый объект —
Path.(Исходный код, png)
- propertyshould_simplify
-
True, если массив вершин должен быть упрощён.
- propertysimplify_threshold
-
Доля пиксельной разницы, ниже которой вершины будут упрощены.
- to_polygons(transform=None, width=0, height=0, closed_only=True)[source]
-
Преобразовать этот путь в список полигонов или полилиний. Каждый полигон/полилиния — это массив Nx2 вершин. Другими словами, каждый полигон не содержит
MOVETOинструкций или кривых. Это полезно для отображения в бэкендах, которые не поддерживают составные пути или кривые Безье.Если width и height оба отличны от нуля, линии будут упрощены таким образом, что вершины вне (0, 0), (width, height) будут обрезаны.
Если closed_only равно
True(по умолчанию), будут возвращены только замкнутые полигоны, где последняя точка совпадает с первой. Любые незамкнутые полилинии в пути будут явно закрыты. Если closed_only равноFalse, любые незамкнутые полигоны в пути будут возвращены как незамкнутые полигоны, а замкнутые полигоны будут возвращены явно замкнутыми, установив последнюю точку равной первой.
- transformed(transform)[source]
-
Возвращает преобразованную копию пути.
См. также
matplotlib.transforms.TransformedPath-
Специализированный класс пути, который кеширует преобразованный результат и автоматически обновляется при изменении преобразования.
- classmethodunit_circle()[source]
-
Возвращает только для чтения
Pathединичной окружности.В большинстве случаев вам понадобится
Path.circle().
- classmethodunit_circle_righthalf()[source]
-
Возвращает
Pathправой половины единичной окружности.См.
Path.circleдля справки по используемому приближению.
- classmethodunit_rectangle()[source]
-
Возвращает экземпляр
Pathединичного прямоугольника от (0, 0) до (1, 1).
- classmethodunit_regular_asterisk(numVertices)[source]
-
Возвращает
Pathдля единичной звёзды с заданным числом вершин и радиусом 1.0, центрированной в (0, 0).
- classmethodunit_regular_polygon(numVertices)[source]
-
Возвращает экземпляр
Pathдля единичного правильного многоугольника с заданным числом вершин, таким образом, что описанная окружность имеет радиус 1.0 и центр в (0, 0).
- classmethodunit_regular_star(numVertices, innerCircle=0.5)[source]
-
Возвращает
Pathдля единичной звёзды с заданным числом вершин и радиусом 1.0, центрированной в (0, 0).
- propertyvertices
-
Список вершин в
Pathв виде массива NumPy Nx2.
- classmethodwedge(theta1, theta2, n=None)[source]
-
Возвращает
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)[source]
-
При заданном последовательности
Path, объектовTransformи смещений, как вPathCollection, возвращает рамку, которая охватывает их все.- Параметры:
-
-
master_transform
Transform -
Глобальное преобразование, применяемое ко всем путям.
-
pathsсписок
Path -
transformsсписок
Affine2D - offsets(N, 2) массив-подобный
-
offset_transform
Affine2D -
Преобразование, применяемое к смещениям перед смещением пути.
-
master_transform
Примечания
Способ объединения paths, transforms и offsets соответствует методу для коллекций: каждый итерируется независимо, поэтому если у вас есть 3 пути, 2 преобразования и 1 смещение, их комбинации будут следующими:
(A, A, A), (B, B, A), (C, A, A)
© 2012–2023 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.6.0/api/path_api.html