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

Справка по API

recipetype(s, args...)

С помощью этой функции можно ссылаться на шаблоны типов по их символу без учета зависимости.

Пример

import RecipesBase: recipetype
recipetype(:groupedbar, 1:10, rand(10, 2))

вместо

import StatsPlots: GroupedBar
GroupedBar((1:10, rand(10, 2)))
@layout mat

Создает схему подграфиков из матрицы символов (где подграфики могут занимать несколько строк или столбцов). Точный размер можно получить с помощью фигурных скобок, в противном случае свободное пространство равномерно распределяется между областями построения подграфиков. С помощью символа _ (подчеркивание) можно игнорировать графики в макете (пустые графики).

Примеры

julia> @layout [a b; c]
2×1 Matrix{Any}:
 Any[(label = :a, blank = false) (label = :b, blank = false)]
 (label = :c, blank = false)

julia> @layout [a{0.3w}; b{0.2h}]
2×1 Matrix{Any}:
 (label = :a, width = 0.3, height = :auto)
 (label = :b, width = :auto, height = 0.2)

julia> @layout [_ ° _; ° ° °; ° ° °]
3×3 Matrix{Any}:
 (label = :_, blank = true)   …  (label = :_, blank = true)
 (label = :°, blank = false)     (label = :°, blank = false)
 (label = :°, blank = false)     (label = :°, blank = false)

Этот удобный макрос обработает определение функции, заменит команды -->, а затем добавит новую версию RecipesBase.apply_recipe для диспетчеризации по аргументам.

Указанная функциональность в первую очередь направлена на преобразование пользовательских типов и настроек в данные и атрибуты, описывающие визуализацию Plots.jl.

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

Пример:

using RecipesBase

# Пользовательский тип, который нужно отобразить
struct T end

@recipe function plot(t::T, n::Integer = 1; customcolor = :green)
    markershape --> :auto, :require
    markercolor --> customcolor, :force
    xrotation --> 5
    zrotation --> 6, :quiet
    rand(10,n)
end

# ---------------------

# В данном примере Plots будет конечным потребителем нашего шаблона
using Plots; gr()

# Этот вызов неявно вызовет `RecipesBase.apply_recipe` как часть
# конвейера обработки Plots (см. раздел «Конвейер» документации по Plots).
# Будут построены 5 линейных графиков, все с черными кружками в качестве маркеров.
# Аргумент markershape должен поддерживаться, а предупреждение аргумента zrotation
# будет подавлено.  Пользователь может переопределить все аргументы, кроме markercolor.
plot(T(), 5; customcolor = :black, shape=:c)

В данном примере мы видим множество механизмов в действии. Мы создаем новый тип T, который будем использовать для диспетчеризации, и необязательный аргумент n, который будет применяться для определения количества отображаемых рядов. Передаются определяемые пользователем аргументы, а в конец команды --> можно добавить флаги:

  • quiet: Подавлять предупреждения неподдерживаемых ключевых слов

  • require: Выводить ошибку, если ключевое слово не поддерживается

  • force: Не разрешать пользователю переопределять это ключевое слово

Предназначен для использования внутри шаблона для добавления в список дополнительных объектов RecipeData:

@recipe function f(::T)
    # эту настройку получают все элементы
    linecolor --> :red

    @series begin
        # эта настройка предназначена только для данного ряда
        fillcolor := :green

        # возвращает аргументы, как в шаблонах
        rand(10)
    end

    # это основной ряд, хотя его можно пропустить, ничего не возвращая.
    # примечание: блок @series ничего не возвращает
    rand(100)
end
@shorthands(funcname::Symbol)

Определяет и экспортирует сокращенные определения методов построения графиков ($funcname и $funcname!). Передает макросу тип ряда (в виде символа).

Примеры

# определяет тип ряда
@recipe function f(::Type{Val{:myseriestype}}, x, y)
    # здесь определенная реализация
end
# строки docstrings пересылаются
\"""
    myseriestype(x, y)
Plot my series type!
\"""
@shorthands myseriestype

С помощью вспомогательных методов можно легко определить собственные шаблоны построения графиков:

@userplot GroupHist

@recipe function f(gh::GroupHist)
    # задает некоторые атрибуты, добавляет некоторые ряды, используя gh.args в качестве входных данных
end
# теперь можно строить графики:
grouphist(rand(1_000, 4))