Справка по API
#
RecipesBase.recipetype
— Method
recipetype(s, args...)
С помощью этой функции можно ссылаться на шаблоны типов по их символу без учета зависимости.
Пример
import RecipesBase: recipetype
recipetype(:groupedbar, 1:10, rand(10, 2))
вместо
import StatsPlots: GroupedBar
GroupedBar((1:10, rand(10, 2)))
#
RecipesBase.@layout
— Macro
@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.@recipe
— Macro
Этот удобный макрос обработает определение функции, заменит команды -->
, а затем добавит новую версию 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: Не разрешать пользователю переопределять это ключевое слово
#
RecipesBase.@series
— Macro
Предназначен для использования внутри шаблона для добавления в список дополнительных объектов RecipeData:
@recipe function f(::T)
# эту настройку получают все элементы
linecolor --> :red
@series begin
# эта настройка предназначена только для данного ряда
fillcolor := :green
# возвращает аргументы, как в шаблонах
rand(10)
end
# это основной ряд, хотя его можно пропустить, ничего не возвращая.
# примечание: блок @series ничего не возвращает
rand(100)
end
#
RecipesBase.@shorthands
— Macro
@shorthands(funcname::Symbol)
Определяет и экспортирует сокращенные определения методов построения графиков ($funcname
и $funcname!
). Передает макросу тип ряда (в виде символа).
Примеры
# определяет тип ряда
@recipe function f(::Type{Val{:myseriestype}}, x, y)
# здесь определенная реализация
end
# строки docstrings пересылаются
\"""
myseriestype(x, y)
Plot my series type!
\"""
@shorthands myseriestype
#
RecipesBase.@userplot
— Macro
С помощью вспомогательных методов можно легко определить собственные шаблоны построения графиков:
@userplot GroupHist
@recipe function f(gh::GroupHist)
# задает некоторые атрибуты, добавляет некоторые ряды, используя gh.args в качестве входных данных
end
# теперь можно строить графики:
grouphist(rand(1_000, 4))