С Plots
, есть две возможности, чтобы показать несколько серий на одном участке:
Во-первых, вы можете использовать матрицу, в которой каждый столбец представляет собой отдельную серию:
a, b, c = randn(100), randn(100), randn(100)
histogram([a b c])
Здесь hcat
является используется для конкатенации векторов (обратите внимание на пробелы вместо запятых).
Это эквивалентно
histogram(randn(100,3))
Вы можете применить параметры к отдельным сериям, используя матрицу строки:
histogram([a b c], label = ["a" "b" "c"])
(Опять же, обратите внимание на пробелы вместо запятых)
Во-вторых, вы можете использовать plot!
и его варианты для обновления предыдущего участка:
histogram(a) # creates a new plot
histogram!(b) # updates the previous plot
histogram!(c) # updates the previous plot
В качестве альтернативы, вы можете указать, какой участок обновить:
p = histogram(a) # creates a new plot p
histogram(b) # creates an independent new plot
histogram!(p, c) # updates plot p
Это полезно, если у вас есть несколько сюжетных линий.
Edit:
После ссылки Фелипе Lema, вы можете реализовать рецепт для гистограмм, которые разделяют края:
using StatsBase
using PlotRecipes
function calcbins(a, bins::Integer)
lo, hi = extrema(a)
StatsBase.histrange(lo, hi, bins) # nice edges
end
calcbins(a, bins::AbstractVector) = bins
@userplot GroupHist
@recipe function f(h::GroupHist; bins = 30)
args = h.args
length(args) == 1 || error("GroupHist should be given one argument")
bins = calcbins(args[1], bins)
seriestype := :bar
bins, mapslices(col -> fit(Histogram, col, bins).weights, args[1], 1)
end
grouphist(randn(100,3))
Edit 2:
Потому что это быстрее, Я изменил рецепт, чтобы использовать StatsBase.fit
для создания гистограммы.
Вы хотите иметь наложенные на несколько гистограмм или иметь подзаголовки? –
Прошу прощения за недоразумение. Я хотел бы наложить несколько гистограмм. – DoubleBass