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

surface

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

surface(x, y, z)
surface(z)

Строит поверхность, где (x, y) определяет сетку, значения высоты которой соответствуют элементам в z. x и y могут быть объектами Vectors, которые определяют регулярную сетку, или объектами Matrices, которые определяют нерегулярную сетку.

Тип графика

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

Примеры

Сеточные поверхности

По умолчанию данные поверхности размещаются на сетке, соответствующей размеру входных данных. Сетку можно задать явно, передав в качестве аргументов X и Y диапазон или вектор значений. Затем позиции или вершины поверхности выводятся как Point.(X, Y', Z). Интервалы (например, 0..1) можно использовать только для указания начальной и конечной точек при условии, что между ними присутствует линейный диапазон.

using GLMakie
xs = LinRange(0, 10, 100)
ys = LinRange(0, 15, 100)
zs = [cos(x) * sin(y) for x in xs, y in ys]

surface(xs, ys, zs, axis=(type=Axis3,))
3c1072e

using GLMakie
using DelimitedFiles

volcano = readdlm(Makie.assetpath("volcano.csv"), ',', Float64)

surface(volcano,
    colormap = :darkterrain,
    colorrange = (80, 190),
    axis=(type=Axis3, azimuth = pi/4))
1441cee

using GLMakie
using SparseArrays
using LinearAlgebra

# Этот пример предоставил Мориц Шауэр (Moritz Schauer) (@mschauer).

#=
Define the precision matrix (inverse covariance matrix)
for the Gaussian noise matrix.  It approximately coincides
with the Laplacian of the 2d grid or the graph representing
the neighborhood relation of pixels in the picture,
https://en.wikipedia.org/wiki/Laplacian_matrix
=#
function gridlaplacian(m, n)
    S = sparse(0.0I, n*m, n*m)
    linear = LinearIndices((1:m, 1:n))
    for i in 1:m
        for j in 1:n
            for (i2, j2) in ((i + 1, j), (i, j + 1))
                if i2 <= m && j2 <= n
                    S[linear[i, j], linear[i2, j2]] -= 1
                    S[linear[i2, j2], linear[i, j]] -= 1
                    S[linear[i, j], linear[i, j]] += 1
                    S[linear[i2, j2], linear[i2, j2]] += 1
                end
            end
        end
    end
    return S
end

# d означает размер данных
d = 150

 # Выборочный центрированный гауссовский шум с правильной корреляцией по методу
 # на основе разложения Холецкого матрицы точности
data = 0.1randn(d,d) + reshape(
        cholesky(gridlaplacian(d,d) + 0.003I) \ randn(d*d),
        d, d
)

surface(data; shading = NoShading, colormap = :deep)
surface(data; shading = NoShading, colormap = :deep)
75b9fbb

Поверхность Quad Mesh (из четырехугольных элементов).

Значения X и Y также могут быть представлены в виде матрицы. В данном случае позиции поверхности следуют как Point.(X, Y, Z), так что поверхность больше не ограничена сеткой XY.

using GLMakie
rs = 1:10
thetas = 0:10:360

xs = rs .* cosd.(thetas')
ys = rs .* sind.(thetas')
zs = sin.(rs) .* cosd.(thetas')

surface(xs, ys, zs)
ddd012d

Обработка значений NaN

Если вершина поверхности имеет значение NaN, то есть X, Y или Z имеют отношение к NaN, построить все связанные грани невозможно. Поэтому у поверхности будет отверстие вокруг вершины NaN. Если значение NaN имеет лишь цвет, для построения будет использоваться nan_color.

using GLMakie
xs = ys = vcat(1:9, NaN, 11:30)
zs = [2 * sin(x+y) for x in range(-3, 3, length=30), y in range(-3, 3, length=30)]
zs_nan = copy(zs)
zs_nan[25, 25] = NaN

f = Figure(size = (600, 300))
surface(f[1, 1], xs, ys, zs_nan, axis = (show_axis = false,))
surface(f[1, 2], 1:30, 1:30, zs, color = zs_nan, nan_color = :red, axis = (show_axis = false,))
f
46d796a

Двумерная поверхность

График поверхности может выступать в качестве внесеточной версии тепловой карты или изображения в двумерной проекции. Для этого рекомендуется передавать данные с помощью color, а не с помощью аргумента Z, чтобы график не конфликтовал с другими из-за его значений Z.

using GLMakie
rs = 1:10
thetas = 0:10:360

xs = rs .* cosd.(thetas')
ys = rs .* sind.(thetas')
zs = sin.(rs) .* cosd.(thetas')

surface(xs, ys, zeros(size(zs)), color = zs, shading = NoShading)
4d9fc24

Атрибуты

alpha

Значение по умолчанию: 1.0
альфа-значение цветовой карты или атрибута цвета. Несколько альфа-значений, как в plot(alpha=0.2, color=(:red, 0.5), перемножаются.

backlight

Значение по умолчанию: 0.0
задает вес для расчета вторичного освещения с инвертированными нормалями.

clip_planes

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

color

Значение по умолчанию: nothing
может быть задан объект Matrix{<: Union{Number, Colorant}} для окрашивания поверхности независимо от компонента z. При значении color=nothing по умолчанию color=z.

colormap

Значение по умолчанию: @inherit colormap :viridis
задает цветовую карту, из которой производится выборка для числовых значений color. Также можно использовать PlotUtils.cgrad(...), Makie.Reverse(any_colormap) или любой символ из ColorBrewer или PlotUtils. Чтобы увидеть все доступные цветовые градиенты, можно вызвать Makie.available_gradients().

colorrange

Значение по умолчанию: automatic
значения, представляющие начальную и конечную точки colormap.

colorscale

Значение по умолчанию: identity
функция преобразования цвета. Может быть любой функцией, но с Colorbar хорошо работают только identity, log, log2, log10, sqrt, logit, Makie.pseudolog10 и Makie.Symlog10.

depth_shift

Значение по умолчанию: 0.0
корректирует значение глубины графика после всех остальных преобразований, т. е. в пространстве отсечения, где 0 <= depth <= 1. Применимо только к GLMakie и WGLMakie и может использоваться для настройки порядка отрисовки (настраиваемая перерисовка).

diffuse

Значение по умолчанию: 1.0
определяет то, насколько сильно красный, зеленый и синий каналы реагируют на диффузное (рассеянное) освещение.

fxaa

Значение по умолчанию: true
определяет то, будет ли график отрисовываться с помощью fxaa (сглаживание, только GLMakie).

highclip

Значение по умолчанию: automatic
цвет для любого значения выше цветового диапазона.

inspectable

Значение по умолчанию: true
определяет, должен ли график проверяться с помощью DataInspector.

inspector_clear

Значение по умолчанию: automatic
задает функцию обратного вызова (inspector, plot) -> ... для очистки пользовательских индикаторов в DataInspector.

inspector_hover

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

inspector_label

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

interpolate

Значение по умолчанию: true
(только для [W]GLMakie) указывает, производится ли выборка из матрицы поверхности с интерполяцией.

invert_normals

Значение по умолчанию: false
инвертирует нормали, сгенерированные для поверхности. Может быть полезно для освещения обратной стороны поверхности.

lowclip

Значение по умолчанию: automatic
цвет для любого значения ниже цветового диапазона.

material

Значение по умолчанию: nothing
используемый только в RPRMakie атрибут для задания сложных материалов RadeonProRender. Внимание! Способ задания материала RPR может измениться, и другие бэкенды будут игнорировать этот атрибут.

model

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

nan_color

Значение по умолчанию: :transparent
цвет для значений NaN.

overdraw

Значение по умолчанию: false
определяет то, будет ли график отрисовываться поверх других графиков. В частности, это означает игнорирование проверок глубины в бэкендах GL.

shading

Значение по умолчанию: automatic
задает используемый алгоритм освещения. Возможные значения: NoShading (без освещения), FastShading (AmbientLight + PointLight) или MultiLightShading (несколько источников света, только для GLMakie). Обратите внимание, что это не влияет на RPRMakie.

shininess

Значение по умолчанию: 32.0
задает резкость отражения.

space

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

specular

Значение по умолчанию: 0.2
определяет то, насколько сильно объект отражает свет в красном, зеленом и синем каналах.

ssao

Значение по умолчанию: false
определяет то, будет ли график отрисовываться с использованием ssao (преграждение окружающего света в экранном пространстве). Обратите внимание, что это имеет смысл только для трехмерных графиков и применимо только с fxaa = true.

transformation

Значение по умолчанию: automatic
документация недоступна.

transparency

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

uv_transform

Значение по умолчанию: automatic
задает преобразование uv-координат, определяющее то, как текстура сопоставляется с поверхностью. Значением этого атрибута может быть I, scale::VecTypes{2}, (translation::VecTypes{2}, scale::VecTypes{2}), любое из значений :rotr90, :rotl90, :rot180, :swap_xy/:transpose, :flip_x, :flip_y, :flip_xy либо (наиболее универсальный вариант) объект Makie.Mat{2, 3, Float32} или Makie.Mat3f, возвращаемый функцией Makie.uv_transform(). Значение можно также изменить, передав кортеж (op3, op2, op1).

visible

Значение по умолчанию: true
определяет то, будет ли отрисовываться график.