surface
|
Страница в процессе перевода. |
#
MakieCore.surface — Function
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,))
using GLMakie
using DelimitedFiles
volcano = readdlm(Makie.assetpath("volcano.csv"), ',', Float64)
surface(volcano,
colormap = :darkterrain,
colorrange = (80, 190),
axis=(type=Axis3, azimuth = pi/4))
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)
Поверхность 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)
Обработка значений 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
Двумерная поверхность
График поверхности может выступать в качестве внесеточной версии тепловой карты или изображения в двумерной проекции. Для этого рекомендуется передавать данные с помощью 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)
Атрибуты
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).
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
инвертирует нормали, сгенерированные для поверхности. Может быть полезно для освещения обратной стороны поверхности.
material
Значение по умолчанию: nothing
используемый только в RPRMakie атрибут для задания сложных материалов RadeonProRender. Внимание! Способ задания материала RPR может измениться, и другие бэкенды будут игнорировать этот атрибут.
model
Значение по умолчанию: automatic
задает модельную матрицу для графика. Переопределяет настройки, выполненные с помощью translate!, rotate! и scale!.
overdraw
Значение по умолчанию: false
определяет то, будет ли график отрисовываться поверх других графиков. В частности, это означает игнорирование проверок глубины в бэкендах GL.
shading
Значение по умолчанию: automatic
задает используемый алгоритм освещения. Возможные значения: NoShading (без освещения), FastShading (AmbientLight + PointLight) или MultiLightShading (несколько источников света, только для GLMakie). Обратите внимание, что это не влияет на RPRMakie.
space
Значение по умолчанию: :data
задает пространство преобразования для прямоугольника, охватывающего график. Возможные входные данные см. в описании Makie.spaces().
specular
Значение по умолчанию: 0.2
определяет то, насколько сильно объект отражает свет в красном, зеленом и синем каналах.
ssao
Значение по умолчанию: false
определяет то, будет ли график отрисовываться с использованием ssao (преграждение окружающего света в экранном пространстве). Обратите внимание, что это имеет смысл только для трехмерных графиков и применимо только с fxaa = true.
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).