如何使用 Plots.jl 在 Julia 中制作堆积面积图/折线图?
How can you make a stacked area / line chart in Julia with Plots.jl?
我想创建一个堆积面积图,类似于 to this 例如,在 Julia 中使用 Plots。
我知道/假设如果你直接在 Julia 中使用 Gadfly 或 PyPlot 后端,你可以做到这一点,但我想知道是否有这方面的秘诀。如果没有,您如何为 Plots Recipes 做出贡献?将是一个有用的补充。
中有类似的食谱
https://docs.juliaplots.org/latest/examples/pgfplots/#portfolio-composition-maps
由于某种原因,缩略图现在看起来已损坏(但代码有效)。
matlab 示例中的确切图可以由
生成
plot(cumsum(Y, dims = 2)[:,end:-1:1], fill = 0, lc = :black)
食谱看起来像
@userplot AreaChart
@recipe function f(a::AreaChart)
fillto --> 0
linecolor --> :black
seriestype --> :path
cumsum(a.args[1], dims = 2)[:,end:-1:1]
end
如果你想为 Plots 贡献一个食谱,你可以在 Plots 上打开一个 pull request,或者,例如。在 StatsPlots - 这里有一个很好的贡献描述:https://docs.juliaplots.org/latest/contributing/
需要一点阅读,但作为对 Julia 包的贡献的介绍非常有用。
你可以在Julia discourse forum上阅读this thread,这个问题有很深的发展。
那里发布的一个使用 Plots 的解决方案是:
# a simple "recipe" for Plots.jl to get stacked area plots
# usage: stackedarea(xvector, datamatrix, plotsoptions)
@recipe function f(pc::StackedArea)
x, y = pc.args
n = length(x)
y = cumsum(y, dims=2)
seriestype := :shape
# create a filled polygon for each item
for c=1:size(y,2)
sx = vcat(x, reverse(x))
sy = vcat(y[:,c], c==1 ? zeros(n) : reverse(y[:,c-1]))
@series (sx, sy)
end
end
a = [1,1,1,1.5,2,3]
b = [0.5,0.6,0.4,0.3,0.3,0.2]
c = [2,1.8,2.2,3.3,2.5,1.8]
sNames = ["a","b","c"]
x = [2001,2002,2003,2004,2005,2006]
plotly()
stackedarea(x, [a b c], labels=reshape(sNames, (1,3)))
(用户 NiclasMattsson)
那里介绍的其他方法包括使用 VegaLite.jl 包。
我想创建一个堆积面积图,类似于 to this 例如,在 Julia 中使用 Plots。
我知道/假设如果你直接在 Julia 中使用 Gadfly 或 PyPlot 后端,你可以做到这一点,但我想知道是否有这方面的秘诀。如果没有,您如何为 Plots Recipes 做出贡献?将是一个有用的补充。
https://docs.juliaplots.org/latest/examples/pgfplots/#portfolio-composition-maps
由于某种原因,缩略图现在看起来已损坏(但代码有效)。
matlab 示例中的确切图可以由
生成plot(cumsum(Y, dims = 2)[:,end:-1:1], fill = 0, lc = :black)
食谱看起来像
@userplot AreaChart
@recipe function f(a::AreaChart)
fillto --> 0
linecolor --> :black
seriestype --> :path
cumsum(a.args[1], dims = 2)[:,end:-1:1]
end
如果你想为 Plots 贡献一个食谱,你可以在 Plots 上打开一个 pull request,或者,例如。在 StatsPlots - 这里有一个很好的贡献描述:https://docs.juliaplots.org/latest/contributing/
需要一点阅读,但作为对 Julia 包的贡献的介绍非常有用。
你可以在Julia discourse forum上阅读this thread,这个问题有很深的发展。
那里发布的一个使用 Plots 的解决方案是:
# a simple "recipe" for Plots.jl to get stacked area plots
# usage: stackedarea(xvector, datamatrix, plotsoptions)
@recipe function f(pc::StackedArea)
x, y = pc.args
n = length(x)
y = cumsum(y, dims=2)
seriestype := :shape
# create a filled polygon for each item
for c=1:size(y,2)
sx = vcat(x, reverse(x))
sy = vcat(y[:,c], c==1 ? zeros(n) : reverse(y[:,c-1]))
@series (sx, sy)
end
end
a = [1,1,1,1.5,2,3]
b = [0.5,0.6,0.4,0.3,0.3,0.2]
c = [2,1.8,2.2,3.3,2.5,1.8]
sNames = ["a","b","c"]
x = [2001,2002,2003,2004,2005,2006]
plotly()
stackedarea(x, [a b c], labels=reshape(sNames, (1,3)))
(用户 NiclasMattsson)
那里介绍的其他方法包括使用 VegaLite.jl 包。