implement fill between functions
This commit is contained in:
parent
f20582e528
commit
7fb1a6a517
@ -92,8 +92,7 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
|
|||||||
"height" => pl_height > 0 ? string(pl_height * px) : "{}",
|
"height" => pl_height > 0 ? string(pl_height * px) : "{}",
|
||||||
"width" => pl_width > 0 ? string(pl_width * px) : "{}",
|
"width" => pl_width > 0 ? string(pl_width * px) : "{}",
|
||||||
)
|
)
|
||||||
)
|
))
|
||||||
)
|
|
||||||
end
|
end
|
||||||
for sp in plt.subplots
|
for sp in plt.subplots
|
||||||
bb = bbox(sp)
|
bb = bbox(sp)
|
||||||
@ -187,10 +186,14 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
|
|||||||
axis_opt
|
axis_opt
|
||||||
)
|
)
|
||||||
for (series_index, series) in enumerate(series_list(sp))
|
for (series_index, series) in enumerate(series_list(sp))
|
||||||
|
# give each series a uuid for fillbetween
|
||||||
|
series_id = uuid4()
|
||||||
|
_pgfplotsx_series_ids[Symbol("$series_index")] = series_id
|
||||||
opt = series.plotattributes
|
opt = series.plotattributes
|
||||||
st = series[:seriestype]
|
st = series[:seriestype]
|
||||||
series_opt = PGFPlotsX.Options(
|
series_opt = PGFPlotsX.Options(
|
||||||
"color" => single_color(opt[:linecolor]),
|
"color" => single_color(opt[:linecolor]),
|
||||||
|
"name path" => string(series_id)
|
||||||
)
|
)
|
||||||
if is3d(series) || st == :heatmap
|
if is3d(series) || st == :heatmap
|
||||||
series_func = PGFPlotsX.Plot3
|
series_func = PGFPlotsX.Plot3
|
||||||
@ -241,7 +244,9 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
|
|||||||
end
|
end
|
||||||
# add fillrange
|
# add fillrange
|
||||||
if series[:fillrange] !== nothing && !isfilledcontour(series) && series[:ribbon] === nothing
|
if series[:fillrange] !== nothing && !isfilledcontour(series) && series[:ribbon] === nothing
|
||||||
|
if series[:fillrange] == 0
|
||||||
pgfx_fillrange_series!( axis, series, series_func, i, _cycle(series[:fillrange], rng), rng)
|
pgfx_fillrange_series!( axis, series, series_func, i, _cycle(series[:fillrange], rng), rng)
|
||||||
|
end
|
||||||
if i == 1 && opt[:label] != "" && sp[:legend] != :none && should_add_to_legend(series)
|
if i == 1 && opt[:label] != "" && sp[:legend] != :none && should_add_to_legend(series)
|
||||||
pgfx_filllegend!(series_opt, opt)
|
pgfx_filllegend!(series_opt, opt)
|
||||||
end
|
end
|
||||||
@ -254,6 +259,13 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
|
|||||||
coordinates,
|
coordinates,
|
||||||
)
|
)
|
||||||
push!(axis, segment_plot)
|
push!(axis, segment_plot)
|
||||||
|
# fill between functions
|
||||||
|
if series[:fillrange] !== nothing && series[:fillrange] != 0
|
||||||
|
push!(axis, series_func(
|
||||||
|
merge(pgfx_fillstyle(opt, series_index), PGFPlotsX.Options("forget plot" => nothing)),
|
||||||
|
"fill between [of=$series_id and $(_pgfplotsx_series_ids[Symbol(string(series[:fillrange]))])]"
|
||||||
|
))
|
||||||
|
end
|
||||||
# add ribbons?
|
# add ribbons?
|
||||||
ribbon = series[:ribbon]
|
ribbon = series[:ribbon]
|
||||||
if ribbon !== nothing
|
if ribbon !== nothing
|
||||||
@ -275,11 +287,14 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
# add subplot annotations
|
# add subplot annotations
|
||||||
anns = sp.attr[:annotations]
|
for ann in sp[:annotations]
|
||||||
for (xi,yi,txt) in anns
|
pgfx_add_annotation!(axis, locate_annotation(sp, ann...)..., pgfx_thickness_scaling(sp))
|
||||||
pgfx_add_annotation!(axis, xi, yi, txt, pgfx_thickness_scaling(sp))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
# anns = sp.attr[:annotations]
|
||||||
|
# for (xi,yi,txt) in anns
|
||||||
|
# pgfx_add_annotation!(axis, xi, yi, txt, pgfx_thickness_scaling(sp))
|
||||||
|
# end
|
||||||
|
end # for series
|
||||||
if ispolar(sp)
|
if ispolar(sp)
|
||||||
axes = the_plot
|
axes = the_plot
|
||||||
else
|
else
|
||||||
@ -291,9 +306,9 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
|
|||||||
else
|
else
|
||||||
push!(plt.o, the_plot)
|
push!(plt.o, the_plot)
|
||||||
end
|
end
|
||||||
end
|
end # for subplots
|
||||||
pgfx_plot.is_created = true
|
pgfx_plot.is_created = true
|
||||||
end
|
end # if
|
||||||
return pgfx_plot
|
return pgfx_plot
|
||||||
end
|
end
|
||||||
## seriestype specifics
|
## seriestype specifics
|
||||||
@ -439,6 +454,8 @@ const _pgfplotsx_linestyles = KW(
|
|||||||
:dashdotdot => "dashdotdotted",
|
:dashdotdot => "dashdotdotted",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const _pgfplotsx_series_ids = KW()
|
||||||
|
|
||||||
const _pgfplotsx_markers = KW(
|
const _pgfplotsx_markers = KW(
|
||||||
:none => "none",
|
:none => "none",
|
||||||
:cross => "+",
|
:cross => "+",
|
||||||
@ -525,7 +542,7 @@ function pgfx_framestyle(style::Symbol)
|
|||||||
return style
|
return style
|
||||||
else
|
else
|
||||||
default_style = get(_pgfx_framestyle_defaults, style, :axes)
|
default_style = get(_pgfx_framestyle_defaults, style, :axes)
|
||||||
@warn("Framestyle :$style is not (yet) supported by the PGFPlots backend. :$default_style was cosen instead.")
|
@warn("Framestyle :$style is not (yet) supported by the PGFPlotsX backend. :$default_style was cosen instead.")
|
||||||
default_style
|
default_style
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user