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]
-
Bases:
objectПоследовательность, возможно, несвязанных, возможно, замкнутых, отрезков прямых и кривых.
В основе хранения лежат два параллельных массива numpy:
- vertices: массив чисел с плавающей точкой (N, 2) вершин
-
codes: массив
numpy.uint8кодов пути длины N или None
Эти два массива всегда имеют одинаковую длину в первом измерении. Например, для представления кубической кривой необходимо предоставить три вершины и три
CURVE4кода.Типы кодов:
-
-
STOP1 вершина (игнорируется) -
Маркер конца всего пути (в настоящее время не требуется и игнорируется)
-
-
-
MOVETO1 вершина -
Поднять перо и переместиться в заданную вершину.
-
-
-
LINETO1 вершина -
Нарисовать линию от текущей позиции до заданной вершины.
-
-
-
CURVE31 контрольная точка, 1 конечная точка -
Нарисовать квадратичную кривую Безье от текущей позиции, с данной контрольной точкой, до заданной конечной точки.
-
-
-
CURVE42 контрольных точки, 1 конечная точка -
Нарисовать кубическую кривую Безье от текущей позиции, с заданными контрольными точками, до заданной конечной точки.
-
-
-
CLOSEPOLY1 вершина (игнорируется) -
Нарисовать отрезок линии до начальной точки текущей ломаной.
-
Если codes равно None, он интерпретируется как
MOVETO, за которым следуют серияLINETO.Пользователи объектов Path не должны напрямую обращаться к массивам вершин и кодов. Вместо этого они должны использовать
iter_segmentsилиcleanedдля получения пар вершин/кодов. Это особенно полезно для согласованной обработки случая, когда codes равно None.Некоторое поведение объектов Path может быть настроено с помощью rcParams. См. rcParams, ключи которых начинаются с 'path.'.
Примечание
Массивы вершин и кодов должны рассматриваться как неизменяемые — ряд оптимизаций и предположений, сделанных в конструкторе, не изменятся при изменении данных.
Создает новый путь с заданными вершинами и кодами.
- Параметры:
-
- vertices(N, 2) массив-подобный
-
Вершины пути в виде массива, маскированного массива или последовательности пар. Маскированные значения, если таковые имеются, будут преобразованы в NaN, которые затем будут обработаны правильно Agg PathIterator и другими потребителями данных пути, такими как
iter_segments(). - codesмассив-подобный или None, необязательно
-
Массив целых чисел длины N, представляющий коды пути. Если не None, codes должен иметь такую же длину, как vertices. Если None, vertices будет интерпретирован как серия отрезков прямых.
- _interpolation_stepsint, необязательно
-
Используется как подсказка для определённых проекций, таких как Polar, что этот путь должен быть линейно интерполирован непосредственно перед рисованием. Этот атрибут в основном является деталью реализации и не предназначен для публичного использования.
- closedbool, необязательно
-
Если codes равно None и closed равно True, вершины будут интерпретированы как отрезки прямых замкнутого многоугольника. Обратите внимание, что последняя вершина затем будет проигнорирована (поскольку соответствующий код будет установлен на
CLOSEPOLY). - readonlybool, необязательно
-
Делает путь неизменяемым и устанавливает вершины и коды в качестве массивов только для чтения.
- 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}
-
Словарь, сопоставляющий коды пути с количеством вершин, ожидаемых для кода.
- STOP=np.uint8(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. Рисование эллиптической дуги с помощью ломаных, квадратичных или кубических кривых Безье.
- 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. Приближение окружности или эллипса с помощью четырех кубических сплайнов Безье.
- cleaned(transform=None, remove_nans=False, clip=None, *, simplify=False, curves=False, stroke_width=1.0, snap=False, sketch=None)[source]
-
Возвращает новый
Pathс вершинами и кодами, очищенными в соответствии с параметрами.См. также
Path.iter_segments-
для получения подробностей о ключевых аргументах.
- clip_to_bbox(bbox, inside=True)[source]
-
Обрезает путь до заданной области.
Путь должен состоять из одной или нескольких замкнутых полигонов. Этот алгоритм не будет работать правильно для незамкнутых путей.
Если inside имеет значение
True, обрезание выполняется внутри области, в противном случае — снаружи.
- code_type
-
псевдоним
uint8
- propertycodes
-
Список кодов в
Pathв виде одномерного массива.Каждый код является одним из
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
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
Transform, необязательно -
Если не
None, points будет сравниваться сself, преобразованной с помощью transform; т.е. для правильной проверки transform должен преобразовать путь в систему координат points. - radiusfloat, по умолчанию: 0
-
Дополнительный отступ на пути в координатах points. Путь расширяется касательно на radius/2; т.е. если вы нарисовали бы путь с шириной линии radius, все точки на линии все равно считались бы содержащимися в области. И наоборот, отрицательные значения уменьшают область: Точки на воображаемой линии будут считаться вне области.
- Возвращает:
-
- массив bool длины N
Примечания
У текущего алгоритма есть некоторые ограничения:
- Результат не определен для точек, находящихся точно на границе (т.е. на пути, смещенном на radius/2).
- Результат не определен, если нет замкнутой области, т.е. все вершины находятся на одной прямой.
- Если из-за сдвига radius ограничивающие линии начинают пересекаться, результат не гарантированно будет правильным.
- copy()[source]
-
Возвращает неглубокую копию
Path, которая будет использовать те же вершины и коды, что и исходныйPath.
- deepcopy(memo=None)[source]
-
Возвращает глубокую копию
Path.Pathне будет являться только для чтения, даже если исходныйPathтаковым является.
- get_extents(transform=None, **kwargs)[source]
-
Получить прямоугольник объекта пути.
- Параметры:
-
-
transform
Transform, необязательно -
Преобразование, которое необходимо применить к пути перед вычислением границ, если таковое имеется.
- **kwargs
-
Передаются методу
iter_bezier.
-
transform
- Возвращает:
-
- matplotlib.transforms.Bbox
-
Прямоугольник границ пути Bbox([[xmin, ymin], [xmax, ymax]])
- statichatch(hatchpattern, density=6)[source]
-
При заданном спецификаторе штриховки, hatchpattern, генерирует
Path, который можно использовать в повторяющемся узоре штриховки. density — количество линий на квадратный единицу.
- interpolated(steps)[source]
-
Возвращает новый путь, ресемплированный до длины N x steps.
Коды, отличные от
LINETO, не обрабатываются корректно.
- intersects_bbox(bbox, filled=True)[source]
-
Возвращает, пересекает ли этот путь заданный
Bbox.Если filled равно True, то это также возвращает True, если путь полностью охватывает
Bbox(т.е. путь рассматривается как заполненный).Прямоугольник границ всегда рассматривается как заполненный.
- intersects_path(other, filled=True)[source]
-
Возвращает, пересекается ли этот путь с другим заданным путем.
Если filled равно True, то это также возвращает True, если один путь полностью охватывает другой (т.е. пути рассматриваются как заполненные).
- iter_bezier(**kwargs)[source]
-
Итерируется по каждой кривой Безье (включая линии) в
Path.- Параметры:
-
- **kwargs
-
Передаются методу
iter_segments.
- Возвращает:
-
-
B
BezierSegment -
Кривые Безье, которые составляют текущий путь. Обратите внимание, что отдельные точки являются кривыми Безье нулевого порядка, а линии — кривыми Безье первого порядка (с двумя опорными точками).
-
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)[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, должен быть 3-элементным кортежем вида (масштаб, длина, случайность), представляющим параметры наброска.
-
transformNone или
- classmethodmake_compound_path_from_polys(XY)[source]
-
Создать составной объект
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)[source]
-
Преобразовать этот путь в список многоугольников или ломаных линий. Каждый многоугольник/ломаная линия — это массив вершин (N, 2). Другими словами, каждый многоугольник не содержит инструкций
MOVETOили кривых. Это полезно для отображения в бэкендах, которые не поддерживают составные пути или кривые Безье.Если width и height оба отличны от нуля, линии будут упрощены, поэтому вершины за пределами (0, 0), (width, height) будут обрезаны.
Полученные многоугольники будут упрощены, если атрибут
Path.should_simplifyпути равенTrue.Если 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в виде массива (N, 2).
- 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]
-
Получение области ограничивающей рамки внутренних объектов
PathCollection.То есть, учитывая последовательность
Path, объектыTransformи смещения, как вPathCollection, возвращает область ограничивающей рамки, которая включает все их.- Parameters:
-
-
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–2023 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/stable/api/path_api.html