Документация Engee

tricontourf

Страница в процессе перевода.

tricontourf(triangles::Triangulation, zs; kwargs...)
tricontourf(xs, ys, zs; kwargs...)

Строит контур триангуляции с заливкой в соответствии с информацией о высоте в zs в позициях по горизонтали xs и позициях по вертикали ys. Вместо xs и ys для указания треугольников можно также предоставить объект Triangulation из DelaunayTriangulation.jl; в противном случае вычисляется неограниченная триангуляция xs и ys.

Тип графика

Псевдоним типа графика для функции tricontourf — Tricontourf.

Примеры

using CairoMakie
using Random
Random.seed!(1234)

x = randn(50)
y = randn(50)
z = -sqrt.(x .^ 2 .+ y .^ 2) .+ 0.1 .* randn.()

f, ax, tr = tricontourf(x, y, z)
scatter!(x, y, color = z, strokewidth = 1, strokecolor = :black)
Colorbar(f[1, 2], tr)
f
76d1680

using CairoMakie
using Random
Random.seed!(1234)

x = randn(200)
y = randn(200)
z = x .* y

f, ax, tr = tricontourf(x, y, z, colormap = :batlow)
scatter!(x, y, color = z, colormap = :batlow, strokewidth = 1, strokecolor = :black)
Colorbar(f[1, 2], tr)
f
fbfdff8

Режимы триангуляции

Ручные триангуляции могут быть переданы в виде матрицы целых чисел 3xN, где каждый столбец из трех целых чисел задает индексы углов одного треугольника в векторе точек.

using CairoMakie
using Random
Random.seed!(123)

n = 20
angles = range(0, 2pi, length = n+1)[1:end-1]
x = [cos.(angles); 2 .* cos.(angles .+ pi/n)]
y = [sin.(angles); 2 .* sin.(angles .+ pi/n)]
z = (x .- 0.5).^2 + (y .- 0.5).^2 .+ 0.5.*randn.()

triangulation_inner = reduce(hcat, map(i -> [0, 1, n] .+ i, 1:n))
triangulation_outer = reduce(hcat, map(i -> [n-1, n, 0] .+ i, 1:n))
triangulation = hcat(triangulation_inner, triangulation_outer)

f, ax, _ = tricontourf(x, y, z, triangulation = triangulation,
    axis = (; aspect = 1, title = "Manual triangulation"))
scatter!(x, y, color = z, strokewidth = 1, strokecolor = :black)

tricontourf(f[1, 2], x, y, z, triangulation = Makie.DelaunayTriangulation(),
    axis = (; aspect = 1, title = "Delaunay triangulation"))
scatter!(x, y, color = z, strokewidth = 1, strokecolor = :black)

f
5844e38

Значение по умолчанию: tricontourf выполняет триангуляцию без ограничений. Для более точного управления триангуляцией (например, принудительного задания границ) используйте пакет DelaunayTriangulation.jl с последующей передачей полученной триангуляции в качестве первого аргумента tricontourf. Например, приведенное выше кольцо можно построить следующим образом:

using CairoMakie
using DelaunayTriangulation
using Random

Random.seed!(123)

n = 20
angles = range(0, 2pi, length = n+1)[1:end-1]
x = [cos.(angles); 2 .* cos.(angles .+ pi/n)]
y = [sin.(angles); 2 .* sin.(angles .+ pi/n)]
z = (x .- 0.5).^2 + (y .- 0.5).^2 .+ 0.5.*randn.()

inner = [n:-1:1; n] # внутренняя часть по часовой стрелке
outer = [(n+1):(2n); n+1] # внешняя часть против часовой стрелки
boundary_nodes = [[outer], [inner]]
points = [x'; y']
tri = triangulate(points; boundary_nodes = boundary_nodes)
f, ax, _ = tricontourf(tri, z;
    axis = (; aspect = 1, title = "Constrained triangulation\nvia DelaunayTriangulation.jl"))
scatter!(x, y, color = z, strokewidth = 1, strokecolor = :black)
f
90218c8

Граничные узлы позволяют поддерживать более сложные области, возможно, с отверстиями, чем это допустимо при указании только самих точек.

using CairoMakie
using DelaunayTriangulation

## Начните с определения границ, а затем преобразуйте в соответствующий интерфейс
curve_1 = [
    [(0.0, 0.0), (5.0, 0.0), (10.0, 0.0), (15.0, 0.0), (20.0, 0.0), (25.0, 0.0)],
    [(25.0, 0.0), (25.0, 5.0), (25.0, 10.0), (25.0, 15.0), (25.0, 20.0), (25.0, 25.0)],
    [(25.0, 25.0), (20.0, 25.0), (15.0, 25.0), (10.0, 25.0), (5.0, 25.0), (0.0, 25.0)],
    [(0.0, 25.0), (0.0, 20.0), (0.0, 15.0), (0.0, 10.0), (0.0, 5.0), (0.0, 0.0)]
] # крайняя внешняя граница: против часовой стрелки
curve_2 = [
    [(4.0, 6.0), (4.0, 14.0), (4.0, 20.0), (18.0, 20.0), (20.0, 20.0)],
    [(20.0, 20.0), (20.0, 16.0), (20.0, 12.0), (20.0, 8.0), (20.0, 4.0)],
    [(20.0, 4.0), (16.0, 4.0), (12.0, 4.0), (8.0, 4.0), (4.0, 4.0), (4.0, 6.0)]
] # внутренняя граница: по часовой стрелке
curve_3 = [
    [(12.906, 10.912), (16.0, 12.0), (16.16, 14.46), (16.29, 17.06),
    (13.13, 16.86), (8.92, 16.4), (8.8, 10.9), (12.906, 10.912)]
] # находится внутри curve_2, значит, идет против часовой стрелки
curves = [curve_1, curve_2, curve_3]
points = [
    (3.0, 23.0), (9.0, 24.0), (9.2, 22.0), (14.8, 22.8), (16.0, 22.0),
    (23.0, 23.0), (22.6, 19.0), (23.8, 17.8), (22.0, 14.0), (22.0, 11.0),
    (24.0, 6.0), (23.0, 2.0), (19.0, 1.0), (16.0, 3.0), (10.0, 1.0), (11.0, 3.0),
    (6.0, 2.0), (6.2, 3.0), (2.0, 3.0), (2.6, 6.2), (2.0, 8.0), (2.0, 11.0),
    (5.0, 12.0), (2.0, 17.0), (3.0, 19.0), (6.0, 18.0), (6.5, 14.5),
    (13.0, 19.0), (13.0, 12.0), (16.0, 8.0), (9.8, 8.0), (7.5, 6.0),
    (12.0, 13.0), (19.0, 15.0)
]
boundary_nodes, points = convert_boundary_points_to_indices(curves; existing_points=points)
edges = Set(((1, 19), (19, 12), (46, 4), (45, 12)))

## Извлеките x, y
tri = triangulate(points; boundary_nodes = boundary_nodes, segments = edges)
z = [(x - 1) * (y + 1) for (x, y) in DelaunayTriangulation.each_point(tri)] # обратите внимание, что each_point сохраняет порядок индексов
f, ax, _ = tricontourf(tri, z, levels = 30; axis = (; aspect = 1))
f
5c77ae4

using CairoMakie
using DelaunayTriangulation

using Random
Random.seed!(1234)

θ = [LinRange(0, 2π * (1 - 1/19), 20); 0]
xy = Vector{Vector{Vector{NTuple{2,Float64}}}}()
cx = [0.0, 3.0]
for i in 1:2
    push!(xy, [[(cx[i] + cos(θ), sin(θ)) for θ in θ]])
    push!(xy, [[(cx[i] + 0.5cos(θ), 0.5sin(θ)) for θ in reverse(θ)]])
end
boundary_nodes, points = convert_boundary_points_to_indices(xy)
tri = triangulate(points; boundary_nodes=boundary_nodes)
z = [(x - 3/2)^2 + y^2 for (x, y) in DelaunayTriangulation.each_point(tri)] # обратите внимание, что each_point сохраняет порядок индексов

f, ax, tr = tricontourf(tri, z, colormap = :matter)
f
171de2e

Относительный режим

Иногда бывает полезно отбросить одну часть диапазона значений, обычно в сторону внешней границы. Вместо того чтобы указывать включаемые уровни вручную, можно задать атрибуту mode значение :relative и указать уровни от 0 до 1 относительно текущего минимального и максимального значений.

using CairoMakie
using Random
Random.seed!(1234)

x = randn(50)
y = randn(50)
z = -sqrt.(x .^ 2 .+ y .^ 2) .+ 0.1 .* randn.()

f, ax, tr = tricontourf(x, y, z, mode = :relative, levels = 0.2:0.1:1)
scatter!(x, y, color = z, strokewidth = 1, strokecolor = :black)
Colorbar(f[1, 2], tr)
f
4281377

Атрибуты

alpha

Значение по умолчанию: 1.0

Альфа-значение цветовой карты или атрибута color.

clip_planes

Значение по умолчанию: automatic

Плоскости отсечения позволяют выполнять отсечение в трехмерном пространстве. Вы можете задать вектор длиной до 8 Plane3f здесь плоскости, за которыми участки будут обрезаны (т.е. станут невидимыми). По умолчанию плоскости клипа наследуются от родительского графика или сцены. Вы можете удалить родительский элемент clip_planes проходя мимо Plane3f[].

colormap

Значение по умолчанию: @inherit colormap

Устанавливает цветовую карту, из которой отбираются цвета полос.

colorscale

Значение по умолчанию: identity

Функция преобразования цвета

depth_shift

Значение по умолчанию: 0.0

настраивает значение глубины участка после всех других преобразований, т.е. в пространстве фрагмента, где 0 <= depth <= 1. This only applies to GLMakie and WGLMakie and can be used to adjust render order (like a tunable overdraw).

edges

Значение по умолчанию: nothing

Документация недоступна.

extendhigh

Значение по умолчанию: nothing

Этот параметр задает цвет дополнительной необязательной полосы, начиная с наивысшего значения levels и заканчивая maximum(zs). Если значение равно :auto, выбирается верхняя граница цветовой карты, и остальные цвета сдвигаются соответствующим образом. Если используется любое цветовое представление, применяется этот цвет. Если значение равно nothing, полоса не добавляется.

extendlow

Значение по умолчанию: nothing

Этот параметр задает цвет дополнительной необязательной полосы от minimum(zs) до самого низкого значения в levels. Если значение равно :auto, выбирается нижний край цветовой карты, и остальные цвета сдвигаются соответствующим образом. Если используется любое цветовое представление, применяется этот цвет. Если значение равно nothing, полоса не добавляется.

fxaa

Значение по умолчанию: true

Регулирует, будет ли график отображаться с использованием fxaa (сглаживание, только GLMakie).

inspectable

Значение по умолчанию: @inherit inspectable

Определяет, должен ли этот график отображаться в DataInspector. Значение по умолчанию зависит от темы родительской сцены.

inspector_clear

Значение по умолчанию: automatic

Sets a callback function (inspector, plot) -> ... для очистки пользовательских индикаторов в DataInspector.

inspector_hover

Значение по умолчанию: automatic

Устанавливает функцию обратного вызова (inspector, plot, index) -> ... которая заменяет функцию по умолчанию show_data методы.

inspector_label

Значение по умолчанию: automatic

Устанавливает функцию обратного вызова (plot, index, position) -> string , которая заменяет метку по умолчанию, сгенерированную DataInspector.

levels

Значение по умолчанию: 10

Может быть как Int в результате получается n полос, разделенных n+1 равноотстоящими уровнями, или это может быть AbstractVector{<:Real} , в котором перечисляются n последовательных ребер от нижнего к верхнему, что приводит к n-1 полосе.

mode

Значение по умолчанию: :normal

Задает способ интерпретации вектора уровней, если для него задано значение :relative, каждое число интерпретируется как дробь между минимальным и максимальным значениями zs. Например,, levels = 0.1:0.1:1.0 исключаются нижние 10% данных.

model

Значение по умолчанию: automatic

Задает матрицу модели для построения графика. Это отменяет корректировки, сделанные с помощью translate!, rotate! и scale!.

nan_color

Значение по умолчанию: :transparent

Документация недоступна.

overdraw

Значение по умолчанию: false

Определяет, будет ли график отображаться поверх других графиков. Это, в частности, означает игнорирование проверок глубины в бэкендах GL

space

Значение по умолчанию: :data

задает область преобразования для прямоугольника, охватывающего участок. Видеть Makie.spaces() для получения возможных исходных данных.

ssao

Значение по умолчанию: false

Определяет, будет ли график отображаться с помощью ssao (screen space ambient occlusion). Обратите внимание, что это имеет смысл только для 3D-графиков и применимо только к fxaa = true.

transformation

Значение по умолчанию: :automatic

Документация недоступна.

transparency

Значение по умолчанию: false

Настраивает прозрачность графика. В GLMakie transparency = true в результате используется прозрачность, независимая от порядка.

triangulation

Значение по умолчанию: DelaunayTriangulation()

Режим, при котором точки в xs и ys являются триангулированными. Проходящий DelaunayTriangulation() выполняет триангуляцию Делоне. Вы также можете передать уже существующую триангуляцию в виде AbstractMatrix{<:Int} с размером (3, n), где каждый столбец определяет индексы вершин одного треугольника, или в виде Triangulation из delaunayTriangulation.jl.

visible

Значение по умолчанию: true

Определяет, будет ли отображаться график или нет.