working on big renaming
This commit is contained in:
parent
8c7d3a6e92
commit
58041cc64e
@ -55,7 +55,7 @@ end
|
|||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
function plot(pkg::BokehPackage; kw...)
|
function _create_plot(pkg::BokehPackage; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
|
|
||||||
# dumpdict(d, "plot", true)
|
# dumpdict(d, "plot", true)
|
||||||
@ -79,7 +79,7 @@ function plot(pkg::BokehPackage; kw...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function plot!(::BokehPackage, plt::Plot; kw...)
|
function _add_series(::BokehPackage, plt::Plot; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
|
|
||||||
# dumpdict(d, "plot!", true)
|
# dumpdict(d, "plot!", true)
|
||||||
@ -105,10 +105,10 @@ end
|
|||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
# TODO: override this to update plot items (title, xlabel, etc) after creation
|
# TODO: override this to update plot items (title, xlabel, etc) after creation
|
||||||
function updatePlotItems(plt::Plot{BokehPackage}, d::Dict)
|
function _update_plot(plt::Plot{BokehPackage}, d::Dict)
|
||||||
end
|
end
|
||||||
|
|
||||||
function updatePositionAndSize(plt::PlottingObject{BokehPackage}, d::Dict)
|
function _update_plot_pos_size(plt::PlottingObject{BokehPackage}, d::Dict)
|
||||||
end
|
end
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
@ -129,7 +129,7 @@ end
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{BokehPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _add_annotations{X,Y,V}(plt::Plot{BokehPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
for ann in anns
|
for ann in anns
|
||||||
# TODO: add the annotation to the plot
|
# TODO: add the annotation to the plot
|
||||||
end
|
end
|
||||||
@ -137,17 +137,17 @@ end
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
function buildSubplotObject!(subplt::Subplot{BokehPackage})
|
function _create_subplot(subplt::Subplot{BokehPackage})
|
||||||
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function expandLimits!(lims, plt::Plot{BokehPackage}, isx::Bool)
|
function _expand_limits(lims, plt::Plot{BokehPackage}, isx::Bool)
|
||||||
# TODO: call expand limits for each plot data
|
# TODO: call expand limits for each plot data
|
||||||
end
|
end
|
||||||
|
|
||||||
function handleLinkInner(plt::Plot{BokehPackage}, isx::Bool)
|
function _remove_axis(plt::Plot{BokehPackage}, isx::Bool)
|
||||||
# TODO: if plot is inner subplot, might need to remove ticks or axis labels
|
# TODO: if plot is inner subplot, might need to remove ticks or axis labels
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -398,13 +398,13 @@ function updateGadflyGuides(plt::Plot, d::Dict)
|
|||||||
|
|
||||||
ticks = get(d, :xticks, :auto)
|
ticks = get(d, :xticks, :auto)
|
||||||
if ticks == :none
|
if ticks == :none
|
||||||
handleLinkInner(plt, true)
|
_remove_axis(plt, true)
|
||||||
else
|
else
|
||||||
addGadflyTicksGuide(gplt, ticks, true)
|
addGadflyTicksGuide(gplt, ticks, true)
|
||||||
end
|
end
|
||||||
ticks = get(d, :yticks, :auto)
|
ticks = get(d, :yticks, :auto)
|
||||||
if ticks == :none
|
if ticks == :none
|
||||||
handleLinkInner(plt, false)
|
_remove_axis(plt, false)
|
||||||
else
|
else
|
||||||
addGadflyTicksGuide(gplt, ticks, false)
|
addGadflyTicksGuide(gplt, ticks, false)
|
||||||
end
|
end
|
||||||
@ -476,7 +476,7 @@ function createGadflyAnnotationObject(x, y, txt::PlotText)
|
|||||||
))
|
))
|
||||||
end
|
end
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{GadflyPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _add_annotations{X,Y,V}(plt::Plot{GadflyPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
for ann in anns
|
for ann in anns
|
||||||
push!(plt.o.guides, createGadflyAnnotationObject(ann...))
|
push!(plt.o.guides, createGadflyAnnotationObject(ann...))
|
||||||
end
|
end
|
||||||
@ -486,7 +486,7 @@ end
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
# create a blank Gadfly.Plot object
|
# create a blank Gadfly.Plot object
|
||||||
function plot(pkg::GadflyPackage; kw...)
|
function _create_plot(pkg::GadflyPackage; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
gplt = createGadflyPlotObject(d)
|
gplt = createGadflyPlotObject(d)
|
||||||
Plot(gplt, pkg, 0, d, Dict[])
|
Plot(gplt, pkg, 0, d, Dict[])
|
||||||
@ -494,7 +494,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
# plot one data series
|
# plot one data series
|
||||||
function plot!(::GadflyPackage, plt::Plot; kw...)
|
function _add_series(::GadflyPackage, plt::Plot; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
addGadflySeries!(plt, d)
|
addGadflySeries!(plt, d)
|
||||||
push!(plt.seriesargs, d)
|
push!(plt.seriesargs, d)
|
||||||
@ -503,7 +503,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function updatePlotItems(plt::Plot{GadflyPackage}, d::Dict)
|
function _update_plot(plt::Plot{GadflyPackage}, d::Dict)
|
||||||
updateGadflyGuides(plt, d)
|
updateGadflyGuides(plt, d)
|
||||||
updateGadflyPlotTheme(plt, d)
|
updateGadflyPlotTheme(plt, d)
|
||||||
end
|
end
|
||||||
@ -535,22 +535,22 @@ end
|
|||||||
|
|
||||||
|
|
||||||
# create the underlying object (each backend will do this differently)
|
# create the underlying object (each backend will do this differently)
|
||||||
function buildSubplotObject!(subplt::Subplot{GadflyPackage}, isbefore::Bool)
|
function _create_subplot(subplt::Subplot{GadflyPackage}, isbefore::Bool)
|
||||||
isbefore && return false # wait until after plotting to create the subplots
|
isbefore && return false # wait until after plotting to create the subplots
|
||||||
subplt.o = nothing
|
subplt.o = nothing
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function handleLinkInner(plt::Plot{GadflyPackage}, isx::Bool)
|
function _remove_axis(plt::Plot{GadflyPackage}, isx::Bool)
|
||||||
gplt = getGadflyContext(plt)
|
gplt = getGadflyContext(plt)
|
||||||
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xticks : Gadfly.Guide.yticks; label=false)
|
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xticks : Gadfly.Guide.yticks; label=false)
|
||||||
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xlabel : Gadfly.Guide.ylabel, "")
|
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xlabel : Gadfly.Guide.ylabel, "")
|
||||||
end
|
end
|
||||||
|
|
||||||
function expandLimits!(lims, plt::Plot{GadflyPackage}, isx::Bool)
|
function _expand_limits(lims, plt::Plot{GadflyPackage}, isx::Bool)
|
||||||
for l in getGadflyContext(plt).layers
|
for l in getGadflyContext(plt).layers
|
||||||
expandLimits!(lims, l.mapping[isx ? :x : :y])
|
_expand_limits(lims, l.mapping[isx ? :x : :y])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -1,19 +1,6 @@
|
|||||||
|
|
||||||
# https://github.com/JuliaGraphics/Immerse.jl
|
# https://github.com/JuliaGraphics/Immerse.jl
|
||||||
|
|
||||||
# immutable ImmersePackage <: PlottingPackage end
|
|
||||||
|
|
||||||
# export immerse
|
|
||||||
# immerse() = backend(:immerse)
|
|
||||||
|
|
||||||
|
|
||||||
# supportedArgs(::ImmersePackage) = supportedArgs(GadflyPackage())
|
|
||||||
# supportedAxes(::ImmersePackage) = supportedAxes(GadflyPackage())
|
|
||||||
# supportedTypes(::ImmersePackage) = supportedTypes(GadflyPackage())
|
|
||||||
# supportedStyles(::ImmersePackage) = supportedStyles(GadflyPackage())
|
|
||||||
# supportedMarkers(::ImmersePackage) = supportedMarkers(GadflyPackage())
|
|
||||||
# supportedScales(::ImmersePackage) = supportedScales(GadflyPackage())
|
|
||||||
|
|
||||||
|
|
||||||
function createImmerseFigure(d::Dict)
|
function createImmerseFigure(d::Dict)
|
||||||
w,h = d[:size]
|
w,h = d[:size]
|
||||||
@ -23,7 +10,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
# create a blank Gadfly.Plot object
|
# create a blank Gadfly.Plot object
|
||||||
function plot(pkg::ImmersePackage; kw...)
|
function _create_plot(pkg::ImmersePackage; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
|
|
||||||
# create the underlying Gadfly.Plot object
|
# create the underlying Gadfly.Plot object
|
||||||
@ -35,7 +22,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
# plot one data series
|
# plot one data series
|
||||||
function plot!(::ImmersePackage, plt::Plot; kw...)
|
function _add_series(::ImmersePackage, plt::Plot; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
addGadflySeries!(plt, d)
|
addGadflySeries!(plt, d)
|
||||||
push!(plt.seriesargs, d)
|
push!(plt.seriesargs, d)
|
||||||
@ -43,7 +30,7 @@ function plot!(::ImmersePackage, plt::Plot; kw...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function updatePlotItems(plt::Plot{ImmersePackage}, d::Dict)
|
function _update_plot(plt::Plot{ImmersePackage}, d::Dict)
|
||||||
updateGadflyGuides(plt, d)
|
updateGadflyGuides(plt, d)
|
||||||
updateGadflyPlotTheme(plt, d)
|
updateGadflyPlotTheme(plt, d)
|
||||||
end
|
end
|
||||||
@ -52,7 +39,7 @@ end
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{ImmersePackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _add_annotations{X,Y,V}(plt::Plot{ImmersePackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
for ann in anns
|
for ann in anns
|
||||||
push!(getGadflyContext(plt).guides, createGadflyAnnotationObject(ann...))
|
push!(getGadflyContext(plt).guides, createGadflyAnnotationObject(ann...))
|
||||||
end
|
end
|
||||||
@ -78,7 +65,7 @@ end
|
|||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
function buildSubplotObject!(subplt::Subplot{ImmersePackage}, isbefore::Bool)
|
function _create_subplot(subplt::Subplot{ImmersePackage}, isbefore::Bool)
|
||||||
return false
|
return false
|
||||||
# isbefore && return false
|
# isbefore && return false
|
||||||
end
|
end
|
||||||
@ -125,15 +112,15 @@ function showSubplotObject(subplt::Subplot{ImmersePackage})
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function handleLinkInner(plt::Plot{ImmersePackage}, isx::Bool)
|
function _remove_axis(plt::Plot{ImmersePackage}, isx::Bool)
|
||||||
gplt = getGadflyContext(plt)
|
gplt = getGadflyContext(plt)
|
||||||
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xticks : Gadfly.Guide.yticks; label=false)
|
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xticks : Gadfly.Guide.yticks; label=false)
|
||||||
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xlabel : Gadfly.Guide.ylabel, "")
|
addOrReplace(gplt.guides, isx ? Gadfly.Guide.xlabel : Gadfly.Guide.ylabel, "")
|
||||||
end
|
end
|
||||||
|
|
||||||
function expandLimits!(lims, plt::Plot{ImmersePackage}, isx::Bool)
|
function _expand_limits(lims, plt::Plot{ImmersePackage}, isx::Bool)
|
||||||
for l in getGadflyContext(plt).layers
|
for l in getGadflyContext(plt).layers
|
||||||
expandLimits!(lims, l.mapping[isx ? :x : :y])
|
_expand_limits(lims, l.mapping[isx ? :x : :y])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -398,7 +398,7 @@ end
|
|||||||
|
|
||||||
usingRightAxis(plt::Plot{PyPlotPackage}) = any(args -> args[:axis] in (:right,:auto), plt.seriesargs)
|
usingRightAxis(plt::Plot{PyPlotPackage}) = any(args -> args[:axis] in (:right,:auto), plt.seriesargs)
|
||||||
|
|
||||||
function updatePlotItems(plt::Plot{PyPlotPackage}, d::Dict)
|
function _update_plot(plt::Plot{PyPlotPackage}, d::Dict)
|
||||||
figorax = plt.o
|
figorax = plt.o
|
||||||
ax = getLeftAxis(figorax)
|
ax = getLeftAxis(figorax)
|
||||||
# PyPlot.sca(ax)
|
# PyPlot.sca(ax)
|
||||||
@ -496,7 +496,7 @@ function createPyPlotAnnotationObject(plt::Plot{PyPlotPackage}, x, y, val::PlotT
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{PyPlotPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _add_annotations{X,Y,V}(plt::Plot{PyPlotPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
for ann in anns
|
for ann in anns
|
||||||
createPyPlotAnnotationObject(plt, ann...)
|
createPyPlotAnnotationObject(plt, ann...)
|
||||||
end
|
end
|
||||||
@ -505,7 +505,7 @@ end
|
|||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
|
|
||||||
# NOTE: pyplot needs to build before
|
# NOTE: pyplot needs to build before
|
||||||
function buildSubplotObject!(subplt::Subplot{PyPlotPackage}, isbefore::Bool)
|
function _create_subplot(subplt::Subplot{PyPlotPackage}, isbefore::Bool)
|
||||||
l = subplt.layout
|
l = subplt.layout
|
||||||
|
|
||||||
w,h = map(px2inch, getinitargs(subplt,1)[:size])
|
w,h = map(px2inch, getinitargs(subplt,1)[:size])
|
||||||
@ -540,8 +540,8 @@ function subplot(plts::AVec{Plot{PyPlotPackage}}, layout::SubplotLayout, d::Dict
|
|||||||
|
|
||||||
subplt = Subplot(nothing, newplts, PyPlotPackage(), p, n, layout, d, true, false, false, (r,c) -> (nothing,nothing))
|
subplt = Subplot(nothing, newplts, PyPlotPackage(), p, n, layout, d, true, false, false, (r,c) -> (nothing,nothing))
|
||||||
|
|
||||||
preprocessSubplot(subplt, d)
|
_preprocess_subplot(subplt, d)
|
||||||
buildSubplotObject!(subplt, true)
|
_create_subplot(subplt, true)
|
||||||
|
|
||||||
for (i,plt) in enumerate(plts)
|
for (i,plt) in enumerate(plts)
|
||||||
for seriesargs in plt.seriesargs
|
for seriesargs in plt.seriesargs
|
||||||
@ -549,13 +549,13 @@ function subplot(plts::AVec{Plot{PyPlotPackage}}, layout::SubplotLayout, d::Dict
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
postprocessSubplot(subplt, d)
|
_postprocess_subplot(subplt, d)
|
||||||
|
|
||||||
subplt
|
subplt
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function handleLinkInner(plt::Plot{PyPlotPackage}, isx::Bool)
|
function _remove_axis(plt::Plot{PyPlotPackage}, isx::Bool)
|
||||||
if isx
|
if isx
|
||||||
plot!(plt, xticks=zeros(0), xlabel="")
|
plot!(plt, xticks=zeros(0), xlabel="")
|
||||||
else
|
else
|
||||||
@ -563,9 +563,9 @@ function handleLinkInner(plt::Plot{PyPlotPackage}, isx::Bool)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function expandLimits!(lims, plt::Plot{PyPlotPackage}, isx::Bool)
|
function _expand_limits(lims, plt::Plot{PyPlotPackage}, isx::Bool)
|
||||||
pltlims = plt.o.ax[isx ? :get_xbound : :get_ybound]()
|
pltlims = plt.o.ax[isx ? :get_xbound : :get_ybound]()
|
||||||
expandLimits!(lims, pltlims)
|
_expand_limits(lims, pltlims)
|
||||||
end
|
end
|
||||||
|
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
|
|||||||
@ -131,7 +131,7 @@ function updateLimsAndTicks(plt::Plot{QwtPackage}, d::Dict, isx::Bool)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function updatePlotItems(plt::Plot{QwtPackage}, d::Dict)
|
function _update_plot(plt::Plot{QwtPackage}, d::Dict)
|
||||||
haskey(d, :title) && Qwt.title(plt.o, d[:title])
|
haskey(d, :title) && Qwt.title(plt.o, d[:title])
|
||||||
haskey(d, :xlabel) && Qwt.xlabel(plt.o, d[:xlabel])
|
haskey(d, :xlabel) && Qwt.xlabel(plt.o, d[:xlabel])
|
||||||
haskey(d, :ylabel) && Qwt.ylabel(plt.o, d[:ylabel])
|
haskey(d, :ylabel) && Qwt.ylabel(plt.o, d[:ylabel])
|
||||||
@ -139,7 +139,7 @@ function updatePlotItems(plt::Plot{QwtPackage}, d::Dict)
|
|||||||
updateLimsAndTicks(plt, d, false)
|
updateLimsAndTicks(plt, d, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
function updatePositionAndSize(plt::PlottingObject{QwtPackage}, d::Dict)
|
function _update_plot_pos_size(plt::PlottingObject{QwtPackage}, d::Dict)
|
||||||
haskey(d, :size) && Qwt.resizewidget(plt.o, d[:size]...)
|
haskey(d, :size) && Qwt.resizewidget(plt.o, d[:size]...)
|
||||||
haskey(d, :pos) && Qwt.movewidget(plt.o, d[:pos]...)
|
haskey(d, :pos) && Qwt.movewidget(plt.o, d[:pos]...)
|
||||||
end
|
end
|
||||||
@ -182,7 +182,7 @@ function createQwtAnnotation(plt::Plot, x, y, val::@compat(AbstractString))
|
|||||||
marker[:attach](plt.o.widget)
|
marker[:attach](plt.o.widget)
|
||||||
end
|
end
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{QwtPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _add_annotations{X,Y,V}(plt::Plot{QwtPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
for ann in anns
|
for ann in anns
|
||||||
createQwtAnnotation(plt, ann...)
|
createQwtAnnotation(plt, ann...)
|
||||||
end
|
end
|
||||||
@ -211,7 +211,7 @@ end
|
|||||||
# -------------------------------
|
# -------------------------------
|
||||||
|
|
||||||
# create the underlying object (each backend will do this differently)
|
# create the underlying object (each backend will do this differently)
|
||||||
function buildSubplotObject!(subplt::Subplot{QwtPackage}, isbefore::Bool)
|
function _create_subplot(subplt::Subplot{QwtPackage}, isbefore::Bool)
|
||||||
isbefore && return false
|
isbefore && return false
|
||||||
i = 0
|
i = 0
|
||||||
rows = Any[]
|
rows = Any[]
|
||||||
@ -233,14 +233,14 @@ function buildSubplotObject!(subplt::Subplot{QwtPackage}, isbefore::Bool)
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
function expandLimits!(lims, plt::Plot{QwtPackage}, isx::Bool)
|
function _expand_limits(lims, plt::Plot{QwtPackage}, isx::Bool)
|
||||||
for series in plt.o.lines
|
for series in plt.o.lines
|
||||||
expandLimits!(lims, isx ? series.x : series.y)
|
_expand_limits(lims, isx ? series.x : series.y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function handleLinkInner(plt::Plot{QwtPackage}, isx::Bool)
|
function _remove_axis(plt::Plot{QwtPackage}, isx::Bool)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,64 +5,7 @@
|
|||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
# supportedArgs(::[PkgName]Package) = _allArgs
|
function _create_plot(pkg::[PkgName]Package; kw...)
|
||||||
supportedArgs(::[PkgName]Package) = [
|
|
||||||
:annotation,
|
|
||||||
# :args,
|
|
||||||
:axis,
|
|
||||||
:background_color,
|
|
||||||
:color,
|
|
||||||
:fillrange,
|
|
||||||
:fillcolor,
|
|
||||||
:foreground_color,
|
|
||||||
:group,
|
|
||||||
# :heatmap_c,
|
|
||||||
# :kwargs,
|
|
||||||
:label,
|
|
||||||
:layout,
|
|
||||||
:legend,
|
|
||||||
:linestyle,
|
|
||||||
:linetype,
|
|
||||||
:linewidth,
|
|
||||||
:markershape,
|
|
||||||
:markercolor,
|
|
||||||
:markersize,
|
|
||||||
:n,
|
|
||||||
:nbins,
|
|
||||||
:nc,
|
|
||||||
:nr,
|
|
||||||
# :pos,
|
|
||||||
:smooth,
|
|
||||||
# :ribbon,
|
|
||||||
:show,
|
|
||||||
:size,
|
|
||||||
:title,
|
|
||||||
:windowtitle,
|
|
||||||
:x,
|
|
||||||
:xlabel,
|
|
||||||
:xlims,
|
|
||||||
:xticks,
|
|
||||||
:y,
|
|
||||||
:ylabel,
|
|
||||||
:ylims,
|
|
||||||
# :yrightlabel,
|
|
||||||
:yticks,
|
|
||||||
# :xscale,
|
|
||||||
# :yscale,
|
|
||||||
# :xflip,
|
|
||||||
# :yflip,
|
|
||||||
# :z,
|
|
||||||
]
|
|
||||||
supportedAxes(::[PkgName]Package) = _allAxes
|
|
||||||
supportedTypes(::[PkgName]Package) = _allTypes
|
|
||||||
supportedStyles(::[PkgName]Package) = _allStyles
|
|
||||||
supportedMarkers(::[PkgName]Package) = _allMarkers
|
|
||||||
supportedScales(::[PkgName]Package) = _allScales
|
|
||||||
subplotSupported(::[PkgName]Package) = false
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function plot(pkg::[PkgName]Package; kw...)
|
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
# TODO: create the window/canvas/context that is the plot within the backend (call it `o`)
|
# TODO: create the window/canvas/context that is the plot within the backend (call it `o`)
|
||||||
# TODO: initialize the plot... title, xlabel, bgcolor, etc
|
# TODO: initialize the plot... title, xlabel, bgcolor, etc
|
||||||
@ -70,20 +13,29 @@ function plot(pkg::[PkgName]Package; kw...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function plot!(::[PkgName]Package, plt::Plot; kw...)
|
function _add_series(::[PkgName]Package, plt::Plot; kw...)
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
# TODO: add one series to the underlying package
|
# TODO: add one series to the underlying package
|
||||||
push!(plt.seriesargs, d)
|
push!(plt.seriesargs, d)
|
||||||
plt
|
plt
|
||||||
end
|
end
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
function _add_annotations{X,Y,V}(plt::Plot{[PkgName]Package}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
|
for ann in anns
|
||||||
# TODO: override this to update plot items (title, xlabel, etc) after creation
|
# TODO: add the annotation to the plot
|
||||||
function updatePlotItems(plt::Plot{[PkgName]Package}, d::Dict)
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function updatePositionAndSize(plt::PlottingObject{[PkgName]Package}, d::Dict)
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
|
function _before_update_plot(plt::Plot{[PkgName]Package})
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO: override this to update plot items (title, xlabel, etc) after creation
|
||||||
|
function _update_plot(plt::Plot{[PkgName]Package}, d::Dict)
|
||||||
|
end
|
||||||
|
|
||||||
|
function _update_plot_pos_size(plt::PlottingObject{[PkgName]Package}, d::Dict)
|
||||||
end
|
end
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
@ -103,23 +55,15 @@ end
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{[PkgName]Package}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _create_subplot(subplt::Subplot{[PkgName]Package})
|
||||||
for ann in anns
|
|
||||||
# TODO: add the annotation to the plot
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
|
||||||
|
|
||||||
function buildSubplotObject!(subplt::Subplot{[PkgName]Package})
|
|
||||||
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
||||||
end
|
end
|
||||||
|
|
||||||
function expandLimits!(lims, plt::Plot{[PkgName]Package}, isx::Bool)
|
function _expand_limits(lims, plt::Plot{[PkgName]Package}, isx::Bool)
|
||||||
# TODO: call expand limits for each plot data
|
# TODO: call expand limits for each plot data
|
||||||
end
|
end
|
||||||
|
|
||||||
function handleLinkInner(plt::Plot{[PkgName]Package}, isx::Bool)
|
function _remove_axis(plt::Plot{[PkgName]Package}, isx::Bool)
|
||||||
# TODO: if plot is inner subplot, might need to remove ticks or axis labels
|
# TODO: if plot is inner subplot, might need to remove ticks or axis labels
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ function rebuildUnicodePlot!(plt::Plot)
|
|||||||
if get(iargs, :xlims, :auto) == :auto
|
if get(iargs, :xlims, :auto) == :auto
|
||||||
xlim = [Inf, -Inf]
|
xlim = [Inf, -Inf]
|
||||||
for d in sargs
|
for d in sargs
|
||||||
expandLimits!(xlim, d[:x])
|
_expand_limits(xlim, d[:x])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
xmin, xmax = iargs[:xlims]
|
xmin, xmax = iargs[:xlims]
|
||||||
@ -25,7 +25,7 @@ function rebuildUnicodePlot!(plt::Plot)
|
|||||||
if get(iargs, :ylims, :auto) == :auto
|
if get(iargs, :ylims, :auto) == :auto
|
||||||
ylim = [Inf, -Inf]
|
ylim = [Inf, -Inf]
|
||||||
for d in sargs
|
for d in sargs
|
||||||
expandLimits!(ylim, d[:y])
|
_expand_limits(ylim, d[:y])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ymin, ymax = iargs[:ylims]
|
ymin, ymax = iargs[:ylims]
|
||||||
@ -135,7 +135,7 @@ function plot!(::UnicodePlotsPackage, plt::Plot; kw...)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
function updatePlotItems(plt::Plot{UnicodePlotsPackage}, d::Dict)
|
function _update_plot(plt::Plot{UnicodePlotsPackage}, d::Dict)
|
||||||
for k in (:title, :xlabel, :ylabel, :xlims, :ylims)
|
for k in (:title, :xlabel, :ylabel, :xlims, :ylims)
|
||||||
if haskey(d, k)
|
if haskey(d, k)
|
||||||
plt.initargs[k] = d[k]
|
plt.initargs[k] = d[k]
|
||||||
@ -175,7 +175,7 @@ end
|
|||||||
|
|
||||||
# we don't do very much for subplots... just stack them vertically
|
# we don't do very much for subplots... just stack them vertically
|
||||||
|
|
||||||
function buildSubplotObject!(subplt::Subplot{UnicodePlotsPackage}, isbefore::Bool)
|
function _create_subplot(subplt::Subplot{UnicodePlotsPackage}, isbefore::Bool)
|
||||||
isbefore && return false
|
isbefore && return false
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|||||||
@ -157,7 +157,7 @@ end
|
|||||||
:yscale => :ylog,
|
:yscale => :ylog,
|
||||||
)
|
)
|
||||||
|
|
||||||
function updatePlotItems(plt::Plot{WinstonPackage}, d::Dict)
|
function _update_plot(plt::Plot{WinstonPackage}, d::Dict)
|
||||||
window, canvas, wplt = getWinstonItems(plt)
|
window, canvas, wplt = getWinstonItems(plt)
|
||||||
for k in (:xlabel, :ylabel, :title, :xlims, :ylims)
|
for k in (:xlabel, :ylabel, :title, :xlims, :ylims)
|
||||||
if haskey(d, k)
|
if haskey(d, k)
|
||||||
@ -182,7 +182,7 @@ function createWinstonAnnotationObject(plt::Plot{WinstonPackage}, x, y, val::@co
|
|||||||
Winston.text(x, y, val)
|
Winston.text(x, y, val)
|
||||||
end
|
end
|
||||||
|
|
||||||
function addAnnotations{X,Y,V}(plt::Plot{WinstonPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
function _add_annotations{X,Y,V}(plt::Plot{WinstonPackage}, anns::AVec{@compat(Tuple{X,Y,V})})
|
||||||
for ann in anns
|
for ann in anns
|
||||||
createWinstonAnnotationObject(plt, ann...)
|
createWinstonAnnotationObject(plt, ann...)
|
||||||
end
|
end
|
||||||
@ -191,7 +191,7 @@ end
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
|
|
||||||
function buildSubplotObject!(subplt::Subplot{WinstonPackage}, isbefore::Bool)
|
function _create_subplot(subplt::Subplot{WinstonPackage}, isbefore::Bool)
|
||||||
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
# TODO: build the underlying Subplot object. this is where you might layout the panes within a GUI window, for example
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -151,7 +151,19 @@ function stroke(args...; α::Real = -1.0)
|
|||||||
for arg in args
|
for arg in args
|
||||||
T = typeof(arg)
|
T = typeof(arg)
|
||||||
|
|
||||||
# if arg in
|
if arg in _allStyles
|
||||||
|
style = arg
|
||||||
|
elseif T <: Colorant
|
||||||
|
color = arg
|
||||||
|
elseif T <: @compat Union{Symbol,AbstractString}
|
||||||
|
try
|
||||||
|
color = parse(Colorant, string(arg))
|
||||||
|
end
|
||||||
|
elseif typeof(arg) <: Real
|
||||||
|
width = arg
|
||||||
|
else
|
||||||
|
warn("Unused stroke arg: $arg ($(typeof(arg)))")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Stroke(width, color, style)
|
Stroke(width, color, style)
|
||||||
|
|||||||
14
src/plot.jl
14
src/plot.jl
@ -90,7 +90,7 @@ function plot!(plt::Plot, args...; kw...)
|
|||||||
preparePlotUpdate(plt)
|
preparePlotUpdate(plt)
|
||||||
|
|
||||||
# get the list of dictionaries, one per series
|
# get the list of dictionaries, one per series
|
||||||
kwList, xmeta, ymeta = createKWargsList(plt, groupargs..., args...; d...)
|
seriesArgList, xmeta, ymeta = createKWargsList(plt, groupargs..., args...; d...)
|
||||||
|
|
||||||
# if we were able to extract guide information from the series inputs, then update the plot
|
# if we were able to extract guide information from the series inputs, then update the plot
|
||||||
# @show xmeta, ymeta
|
# @show xmeta, ymeta
|
||||||
@ -98,7 +98,7 @@ function plot!(plt::Plot, args...; kw...)
|
|||||||
updateDictWithMeta(d, plt.initargs, ymeta, false)
|
updateDictWithMeta(d, plt.initargs, ymeta, false)
|
||||||
|
|
||||||
# now we can plot the series
|
# now we can plot the series
|
||||||
for (i,di) in enumerate(kwList)
|
for (i,di) in enumerate(seriesArgList)
|
||||||
plt.n += 1
|
plt.n += 1
|
||||||
|
|
||||||
setTicksFromStringVector(d, di, :x, :xticks)
|
setTicksFromStringVector(d, di, :x, :xticks)
|
||||||
@ -114,7 +114,7 @@ function plot!(plt::Plot, args...; kw...)
|
|||||||
plot!(plt.backend, plt; di...)
|
plot!(plt.backend, plt; di...)
|
||||||
end
|
end
|
||||||
|
|
||||||
addAnnotations(plt, d)
|
_add_annotations(plt, d)
|
||||||
|
|
||||||
warnOnUnsupportedScales(plt.backend, d)
|
warnOnUnsupportedScales(plt.backend, d)
|
||||||
|
|
||||||
@ -123,10 +123,10 @@ function plot!(plt::Plot, args...; kw...)
|
|||||||
if !haskey(d, :subplot)
|
if !haskey(d, :subplot)
|
||||||
merge!(plt.initargs, d)
|
merge!(plt.initargs, d)
|
||||||
dumpdict(plt.initargs, "Updating plot items")
|
dumpdict(plt.initargs, "Updating plot items")
|
||||||
updatePlotItems(plt, plt.initargs)
|
_update_plot(plt, plt.initargs)
|
||||||
end
|
end
|
||||||
|
|
||||||
updatePositionAndSize(plt, d)
|
_update_plot_pos_size(plt, d)
|
||||||
|
|
||||||
current(plt)
|
current(plt)
|
||||||
|
|
||||||
@ -184,10 +184,10 @@ annotations{X,Y,V}(t::@compat(Tuple{X,Y,V})) = [t]
|
|||||||
annotations(anns) = error("Expecting a tuple (or vector of tuples) for annotations: ",
|
annotations(anns) = error("Expecting a tuple (or vector of tuples) for annotations: ",
|
||||||
"(x, y, annotation)\n got: $(typeof(anns))")
|
"(x, y, annotation)\n got: $(typeof(anns))")
|
||||||
|
|
||||||
function addAnnotations(plt::Plot, d::Dict)
|
function _add_annotations(plt::Plot, d::Dict)
|
||||||
anns = annotations(get(d, :annotation, nothing))
|
anns = annotations(get(d, :annotation, nothing))
|
||||||
if !isempty(anns)
|
if !isempty(anns)
|
||||||
addAnnotations(plt, anns)
|
_add_annotations(plt, anns)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -50,10 +50,10 @@ include("backends/bokeh.jl")
|
|||||||
|
|
||||||
plot(pkg::PlottingPackage; kw...) = error("plot($pkg; kw...) is not implemented")
|
plot(pkg::PlottingPackage; kw...) = error("plot($pkg; kw...) is not implemented")
|
||||||
plot!(pkg::PlottingPackage, plt::Plot; kw...) = error("plot!($pkg, plt; kw...) is not implemented")
|
plot!(pkg::PlottingPackage, plt::Plot; kw...) = error("plot!($pkg, plt; kw...) is not implemented")
|
||||||
updatePlotItems(pkg::PlottingPackage, plt::Plot, d::Dict) = error("updatePlotItems($pkg, plt, d) is not implemented")
|
_update_plot(pkg::PlottingPackage, plt::Plot, d::Dict) = error("_update_plot($pkg, plt, d) is not implemented")
|
||||||
# Base.display(pkg::PlottingPackage, plt::Plot) = error("display($pkg, plt) is not implemented")
|
# Base.display(pkg::PlottingPackage, plt::Plot) = error("display($pkg, plt) is not implemented")
|
||||||
|
|
||||||
updatePositionAndSize{P<:PlottingPackage}(plt::PlottingObject{P}, d::Dict) = nothing #error("updatePositionAndSize(plt,d) is not implemented for $P")
|
_update_plot_pos_size{P<:PlottingPackage}(plt::PlottingObject{P}, d::Dict) = nothing #error("_update_plot_pos_size(plt,d) is not implemented for $P")
|
||||||
|
|
||||||
subplot(pkg::PlottingPackage; kw...) = error("subplot($pkg; kw...) is not implemented")
|
subplot(pkg::PlottingPackage; kw...) = error("subplot($pkg; kw...) is not implemented")
|
||||||
subplot!(pkg::PlottingPackage, subplt::Subplot; kw...) = error("subplot!($pkg, subplt; kw...) is not implemented")
|
subplot!(pkg::PlottingPackage, subplt::Subplot; kw...) = error("subplot!($pkg, subplt; kw...) is not implemented")
|
||||||
|
|||||||
@ -81,7 +81,7 @@ Base.getindex(layout::GridLayout, r::Int, c::Int) = (r-1) * layout.nc + c
|
|||||||
Base.getindex(subplt::Subplot, args...) = subplt.plts[subplt.layout[args...]]
|
Base.getindex(subplt::Subplot, args...) = subplt.plts[subplt.layout[args...]]
|
||||||
|
|
||||||
# handle "linking" the subplot axes together
|
# handle "linking" the subplot axes together
|
||||||
# each backend should implement the handleLinkInner and expandLimits! methods
|
# each backend should implement the _remove_axis and _expand_limits methods
|
||||||
function linkAxis(subplt::Subplot, isx::Bool)
|
function linkAxis(subplt::Subplot, isx::Bool)
|
||||||
|
|
||||||
# collect the list of plots and the expanded limits for those plots that should be linked on this axis
|
# collect the list of plots and the expanded limits for those plots that should be linked on this axis
|
||||||
@ -104,7 +104,7 @@ function linkAxis(subplt::Subplot, isx::Bool)
|
|||||||
isinner = (isx && r < nrows(subplt.layout)) || (!isx && !firstone)
|
isinner = (isx && r < nrows(subplt.layout)) || (!isx && !firstone)
|
||||||
push!(includedPlots, (plt, isinner, k))
|
push!(includedPlots, (plt, isinner, k))
|
||||||
|
|
||||||
expandLimits!(lims[k], plt, isx)
|
_expand_limits(lims[k], plt, isx)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -112,7 +112,7 @@ function linkAxis(subplt::Subplot, isx::Bool)
|
|||||||
# do the axis adjustments
|
# do the axis adjustments
|
||||||
for (plt, isinner, k) in includedPlots
|
for (plt, isinner, k) in includedPlots
|
||||||
if isinner
|
if isinner
|
||||||
handleLinkInner(plt, isx)
|
_remove_axis(plt, isx)
|
||||||
end
|
end
|
||||||
(isx ? xlims! : ylims!)(plt, lims[k]...)
|
(isx ? xlims! : ylims!)(plt, lims[k]...)
|
||||||
end
|
end
|
||||||
@ -209,29 +209,8 @@ function subplot{P<:PlottingPackage}(plts::AVec{Plot{P}}, layout::SubplotLayout,
|
|||||||
n = sum([plt.n for plt in plts])
|
n = sum([plt.n for plt in plts])
|
||||||
subplt = Subplot(nothing, collect(plts), P(), p, n, layout, Dict(), false, false, false, (r,c) -> (nothing,nothing))
|
subplt = Subplot(nothing, collect(plts), P(), p, n, layout, Dict(), false, false, false, (r,c) -> (nothing,nothing))
|
||||||
|
|
||||||
# preprocessArgs!(d)
|
_preprocess_subplot(subplt, d)
|
||||||
|
_postprocess_subplot(subplt, d)
|
||||||
# #
|
|
||||||
# for (i,plt) in enumerate(plts)
|
|
||||||
# di = copy(plt.initargs)
|
|
||||||
|
|
||||||
# for ck in (:background_color, :foreground_color, :color_palette)
|
|
||||||
# # if we have a value to override, do it
|
|
||||||
# if haskey(d, ck)
|
|
||||||
# di[ck] = get_mod(d[ck], i)
|
|
||||||
# end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# # build a new dict from the initargs of the plots
|
|
||||||
# iargs = Dict()
|
|
||||||
# for k in keys(_plotDefaults)
|
|
||||||
# iargs[k] = Any[plt.initargs[k] for plt in plts]'
|
|
||||||
# end
|
|
||||||
# merge!(iargs, d)
|
|
||||||
|
|
||||||
preprocessSubplot(subplt, d)
|
|
||||||
postprocessSubplot(subplt, d)
|
|
||||||
|
|
||||||
subplt
|
subplt
|
||||||
end
|
end
|
||||||
@ -241,7 +220,7 @@ end
|
|||||||
# ------------------------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
function preprocessSubplot(subplt::Subplot, d::Dict)
|
function _preprocess_subplot(subplt::Subplot, d::Dict)
|
||||||
validateSubplotSupported()
|
validateSubplotSupported()
|
||||||
preprocessArgs!(d)
|
preprocessArgs!(d)
|
||||||
dumpdict(d, "After subplot! preprocessing")
|
dumpdict(d, "After subplot! preprocessing")
|
||||||
@ -256,8 +235,6 @@ function preprocessSubplot(subplt::Subplot, d::Dict)
|
|||||||
# those into the plot's initargs. (example... `palette = [:blues :reds]` goes into subplt.initargs,
|
# those into the plot's initargs. (example... `palette = [:blues :reds]` goes into subplt.initargs,
|
||||||
# then the ColorGradient for :blues/:reds is merged into plot 1/2 initargs, which is then used for color selection)
|
# then the ColorGradient for :blues/:reds is merged into plot 1/2 initargs, which is then used for color selection)
|
||||||
for i in 1:length(subplt.layout)
|
for i in 1:length(subplt.layout)
|
||||||
# di = getPlotArgs(backend(), subplt.initargs, i)
|
|
||||||
# merge!(subplt.plts[i].initargs, di)
|
|
||||||
subplt.plts[i].initargs = getPlotArgs(backend(), merge(subplt.plts[i].initargs, d), i)
|
subplt.plts[i].initargs = getPlotArgs(backend(), merge(subplt.plts[i].initargs, d), i)
|
||||||
end
|
end
|
||||||
merge!(subplt.initargs, d)
|
merge!(subplt.initargs, d)
|
||||||
@ -271,37 +248,20 @@ function preprocessSubplot(subplt::Subplot, d::Dict)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function postprocessSubplot(subplt::Subplot, d::Dict)
|
function _postprocess_subplot(subplt::Subplot, d::Dict)
|
||||||
# init (after plot creation)
|
# init (after plot creation)
|
||||||
if !subplt.initialized
|
if !subplt.initialized
|
||||||
subplt.initialized = buildSubplotObject!(subplt, false)
|
subplt.initialized = _create_subplot(subplt, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
# add title, axis labels, ticks, etc
|
# add title, axis labels, ticks, etc
|
||||||
for (i,plt) in enumerate(subplt.plts)
|
for (i,plt) in enumerate(subplt.plts)
|
||||||
|
|
||||||
# # # get the full initargs, overriding any new settings
|
|
||||||
# # di = copy(merge(plt.initargs, d))
|
|
||||||
# di = copy(d)
|
|
||||||
|
|
||||||
# for (k,v) in di
|
|
||||||
# if typeof(v) <: AVec
|
|
||||||
# di[k] = v[mod1(i, length(v))]
|
|
||||||
# elseif typeof(v) <: AMat
|
|
||||||
# m = size(v,2)
|
|
||||||
# di[k] = (size(v,1) == 1 ? v[1, mod1(i, m)] : v[:, mod1(i, m)])
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# di = merge!(plt.initargs, di)
|
|
||||||
|
|
||||||
di = plt.initargs
|
di = plt.initargs
|
||||||
|
|
||||||
dumpdict(di, "Updating sp $i")
|
dumpdict(di, "Updating sp $i")
|
||||||
updatePlotItems(plt, di)
|
_update_plot(plt, di)
|
||||||
end
|
end
|
||||||
|
|
||||||
updatePositionAndSize(subplt, d)
|
_update_plot_pos_size(subplt, d)
|
||||||
|
|
||||||
# handle links
|
# handle links
|
||||||
subplt.linkx && linkAxis(subplt, true)
|
subplt.linkx && linkAxis(subplt, true)
|
||||||
@ -335,14 +295,14 @@ function subplot!(subplt::Subplot, args...; kw...)
|
|||||||
# validateSubplotSupported()
|
# validateSubplotSupported()
|
||||||
|
|
||||||
d = Dict(kw)
|
d = Dict(kw)
|
||||||
preprocessSubplot(subplt, d)
|
_preprocess_subplot(subplt, d)
|
||||||
|
|
||||||
# create the underlying object (each backend will do this differently)
|
# create the underlying object (each backend will do this differently)
|
||||||
# note: we call it once before doing the individual plots, and once after
|
# note: we call it once before doing the individual plots, and once after
|
||||||
# this is because some backends need to set up the subplots and then plot,
|
# this is because some backends need to set up the subplots and then plot,
|
||||||
# and others need to do it the other way around
|
# and others need to do it the other way around
|
||||||
if !subplt.initialized
|
if !subplt.initialized
|
||||||
subplt.initialized = buildSubplotObject!(subplt, true)
|
subplt.initialized = _create_subplot(subplt, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
# handle grouping
|
# handle grouping
|
||||||
@ -365,17 +325,6 @@ function subplot!(subplt::Subplot, args...; kw...)
|
|||||||
plt = getplot(subplt)
|
plt = getplot(subplt)
|
||||||
plt.n += 1
|
plt.n += 1
|
||||||
|
|
||||||
# # update the plot's initargs for things such as palettes, etc
|
|
||||||
# for (k,v) in subplt.initargs
|
|
||||||
# haskey(_plotDefaults, k) || continue
|
|
||||||
# if typeof(v) <: AVec
|
|
||||||
# plt.initargs[k] = v[mod1(i, length(v))]
|
|
||||||
# elseif typeof(v) <: AMat
|
|
||||||
# m = size(v,2)
|
|
||||||
# plt.initargs[k] = (size(v,1) == 1 ? v[1, mod1(i, m)] : v[:, mod1(i, m)])
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# cleanup the dictionary that we pass into the plot! command
|
# cleanup the dictionary that we pass into the plot! command
|
||||||
di[:show] = false
|
di[:show] = false
|
||||||
di[:subplot] = true
|
di[:subplot] = true
|
||||||
@ -389,7 +338,7 @@ function subplot!(subplt::Subplot, args...; kw...)
|
|||||||
_plot_from_subplot!(plt; di...)
|
_plot_from_subplot!(plt; di...)
|
||||||
end
|
end
|
||||||
|
|
||||||
postprocessSubplot(subplt, d)
|
_postprocess_subplot(subplt, d)
|
||||||
|
|
||||||
# show it automatically?
|
# show it automatically?
|
||||||
if haskey(d, :show) && d[:show]
|
if haskey(d, :show) && d[:show]
|
||||||
@ -407,10 +356,9 @@ function _plot_from_subplot!(plt::Plot, args...; kw...)
|
|||||||
setTicksFromStringVector(d, d, :x, :xticks)
|
setTicksFromStringVector(d, d, :x, :xticks)
|
||||||
setTicksFromStringVector(d, d, :y, :yticks)
|
setTicksFromStringVector(d, d, :y, :yticks)
|
||||||
|
|
||||||
# dumpdict(d, "Plot from subplot")
|
_add_series(plt.backend, plt; d...)
|
||||||
plot!(plt.backend, plt; d...)
|
|
||||||
|
|
||||||
addAnnotations(plt, d)
|
_add_annotations(plt, d)
|
||||||
warnOnUnsupportedScales(plt.backend, d)
|
warnOnUnsupportedScales(plt.backend, d)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -131,7 +131,7 @@ maketuple{T,S}(x::@compat(Tuple{T,S})) = x
|
|||||||
unzip{T,S}(v::AVec{@compat(Tuple{T,S})}) = [vi[1] for vi in v], [vi[2] for vi in v]
|
unzip{T,S}(v::AVec{@compat(Tuple{T,S})}) = [vi[1] for vi in v], [vi[2] for vi in v]
|
||||||
|
|
||||||
# given 2-element lims and a vector of data x, widen lims to account for the extrema of x
|
# given 2-element lims and a vector of data x, widen lims to account for the extrema of x
|
||||||
function expandLimits!(lims, x)
|
function _expand_limits(lims, x)
|
||||||
try
|
try
|
||||||
e1, e2 = extrema(x)
|
e1, e2 = extrema(x)
|
||||||
lims[1] = min(lims[1], e1)
|
lims[1] = min(lims[1], e1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user