Merge remote-tracking branch 'tbreloff/master'
This commit is contained in:
commit
4c2db68037
@ -1077,14 +1077,14 @@ else
|
|||||||
"use_default"
|
"use_default"
|
||||||
end
|
end
|
||||||
|
|
||||||
const _gr_wstype = Ref(get(ENV, "GKS_WSTYPE", _gr_wstype_default))
|
const _gr_wstype = Ref(get(ENV, "GKSwstype", _gr_wstype_default))
|
||||||
gr_set_output(wstype::String) = (_gr_wstype[] = wstype)
|
gr_set_output(wstype::String) = (_gr_wstype[] = wstype)
|
||||||
|
|
||||||
for (mime, fmt) in _gr_mimeformats
|
for (mime, fmt) in _gr_mimeformats
|
||||||
@eval function _show(io::IO, ::MIME{Symbol($mime)}, plt::Plot{GRBackend})
|
@eval function _show(io::IO, ::MIME{Symbol($mime)}, plt::Plot{GRBackend})
|
||||||
GR.emergencyclosegks()
|
GR.emergencyclosegks()
|
||||||
filepath = tempname() * "." * $fmt
|
filepath = tempname() * "." * $fmt
|
||||||
ENV["GKS_WSTYPE"] = $fmt
|
ENV["GKSwstype"] = $fmt
|
||||||
ENV["GKS_FILEPATH"] = filepath
|
ENV["GKS_FILEPATH"] = filepath
|
||||||
gr_display(plt)
|
gr_display(plt)
|
||||||
GR.emergencyclosegks()
|
GR.emergencyclosegks()
|
||||||
@ -1097,7 +1097,7 @@ function _display(plt::Plot{GRBackend})
|
|||||||
if plt[:display_type] == :inline
|
if plt[:display_type] == :inline
|
||||||
GR.emergencyclosegks()
|
GR.emergencyclosegks()
|
||||||
filepath = tempname() * ".pdf"
|
filepath = tempname() * ".pdf"
|
||||||
ENV["GKS_WSTYPE"] = "pdf"
|
ENV["GKSwstype"] = "pdf"
|
||||||
ENV["GKS_FILEPATH"] = filepath
|
ENV["GKS_FILEPATH"] = filepath
|
||||||
gr_display(plt)
|
gr_display(plt)
|
||||||
GR.emergencyclosegks()
|
GR.emergencyclosegks()
|
||||||
@ -1107,7 +1107,7 @@ function _display(plt::Plot{GRBackend})
|
|||||||
else
|
else
|
||||||
ENV["GKS_DOUBLE_BUF"] = true
|
ENV["GKS_DOUBLE_BUF"] = true
|
||||||
if _gr_wstype[] != "use_default"
|
if _gr_wstype[] != "use_default"
|
||||||
ENV["GKS_WSTYPE"] = _gr_wstype[]
|
ENV["GKSwstype"] = _gr_wstype[]
|
||||||
end
|
end
|
||||||
gr_display(plt)
|
gr_display(plt)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -314,12 +314,18 @@ function _show(io::IO, mime::MIME"application/pdf", plt::Plot{PGFPlotsBackend})
|
|||||||
PGFPlots.save(PGFPlots.PDF(fn), pgfplt)
|
PGFPlots.save(PGFPlots.PDF(fn), pgfplt)
|
||||||
|
|
||||||
# read it into io
|
# read it into io
|
||||||
write(io, readall(open(fn)))
|
write(io, readstring(open(fn)))
|
||||||
|
|
||||||
# cleanup
|
# cleanup
|
||||||
PGFPlots.cleanup(plt.o)
|
PGFPlots.cleanup(plt.o)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function _show(io::IO, mime::MIME"application/x-tex", plt::Plot{PGFPlotsBackend})
|
||||||
|
fn = tempname()*".tex"
|
||||||
|
PGFPlots.save(fn, backend_object(plt), include_preamble=false)
|
||||||
|
write(io, readstring(open(fn)))
|
||||||
|
end
|
||||||
|
|
||||||
function _display(plt::Plot{PGFPlotsBackend})
|
function _display(plt::Plot{PGFPlotsBackend})
|
||||||
# prepare the object
|
# prepare the object
|
||||||
pgfplt = PGFPlots.plot(plt.o)
|
pgfplt = PGFPlots.plot(plt.o)
|
||||||
|
|||||||
@ -248,7 +248,7 @@ end
|
|||||||
function font(args...)
|
function font(args...)
|
||||||
|
|
||||||
# defaults
|
# defaults
|
||||||
family = "Helvetica"
|
family = "sans-serif"
|
||||||
pointsize = 14
|
pointsize = 14
|
||||||
halign = :hcenter
|
halign = :hcenter
|
||||||
valign = :vcenter
|
valign = :vcenter
|
||||||
|
|||||||
@ -154,6 +154,7 @@ const _mimeformats = Dict(
|
|||||||
"application/postscript" => "ps",
|
"application/postscript" => "ps",
|
||||||
"image/svg+xml" => "svg",
|
"image/svg+xml" => "svg",
|
||||||
"text/plain" => "txt",
|
"text/plain" => "txt",
|
||||||
|
"application/x-tex" => "tex",
|
||||||
)
|
)
|
||||||
|
|
||||||
const _best_html_output_type = KW(
|
const _best_html_output_type = KW(
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
# This should cut down on boilerplate code and allow more focused dispatch on type
|
# This should cut down on boilerplate code and allow more focused dispatch on type
|
||||||
# note: returns meta information... mainly for use with automatic labeling from DataFrames for now
|
# note: returns meta information... mainly for use with automatic labeling from DataFrames for now
|
||||||
|
|
||||||
typealias FuncOrFuncs Union{Function, AVec{Function}}
|
typealias FuncOrFuncs{F} Union{F, Vector{F}, Matrix{F}}
|
||||||
|
|
||||||
all3D(d::KW) = trueOrAllTrue(st -> st in (:contour, :contourf, :heatmap, :surface, :wireframe, :contour3d, :image), get(d, :seriestype, :none))
|
all3D(d::KW) = trueOrAllTrue(st -> st in (:contour, :contourf, :heatmap, :surface, :wireframe, :contour3d, :image), get(d, :seriestype, :none))
|
||||||
|
|
||||||
@ -96,8 +96,8 @@ nobigs(v) = v
|
|||||||
end
|
end
|
||||||
|
|
||||||
# not allowed
|
# not allowed
|
||||||
compute_xyz(x::Void, y::FuncOrFuncs, z) = error("If you want to plot the function `$y`, you need to define the x values!")
|
compute_xyz{F<:Function}(x::Void, y::FuncOrFuncs{F}, z) = error("If you want to plot the function `$y`, you need to define the x values!")
|
||||||
compute_xyz(x::Void, y::Void, z::FuncOrFuncs) = error("If you want to plot the function `$z`, you need to define x and y values!")
|
compute_xyz{F<:Function}(x::Void, y::Void, z::FuncOrFuncs{F}) = error("If you want to plot the function `$z`, you need to define x and y values!")
|
||||||
compute_xyz(x::Void, y::Void, z::Void) = error("x/y/z are all nothing!")
|
compute_xyz(x::Void, y::Void, z::Void) = error("x/y/z are all nothing!")
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
@ -341,7 +341,7 @@ end
|
|||||||
|
|
||||||
# function without range... use the current range of the x-axis
|
# function without range... use the current range of the x-axis
|
||||||
|
|
||||||
@recipe function f(f::FuncOrFuncs)
|
@recipe function f{F<:Function}(f::FuncOrFuncs{F})
|
||||||
plt = d[:plot_object]
|
plt = d[:plot_object]
|
||||||
xmin, xmax = try
|
xmin, xmax = try
|
||||||
axis_limits(plt[1][:xaxis])
|
axis_limits(plt[1][:xaxis])
|
||||||
@ -360,8 +360,9 @@ end
|
|||||||
# # if functions come first, just swap the order (not to be confused with parametric functions...
|
# # if functions come first, just swap the order (not to be confused with parametric functions...
|
||||||
# # as there would be more than one function passed in)
|
# # as there would be more than one function passed in)
|
||||||
|
|
||||||
@recipe function f(f::FuncOrFuncs, x)
|
@recipe function f{F<:Function}(f::FuncOrFuncs{F}, x)
|
||||||
@assert !(typeof(x) <: FuncOrFuncs) # otherwise we'd hit infinite recursion here
|
F2 = typeof(x)
|
||||||
|
@assert !(F2 <: Function || (F2 <: AbstractArray && F2.parameters[1] <: Function)) # otherwise we'd hit infinite recursion here
|
||||||
x, f
|
x, f
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -420,19 +421,23 @@ end
|
|||||||
|
|
||||||
#
|
#
|
||||||
# # special handling... xmin/xmax with parametric function(s)
|
# # special handling... xmin/xmax with parametric function(s)
|
||||||
@recipe function f(f::FuncOrFuncs, xmin::Number, xmax::Number)
|
@recipe function f(f::Function, xmin::Number, xmax::Number)
|
||||||
xs = adapted_grid(f, (xmin, xmax))
|
xs = adapted_grid(f, (xmin, xmax))
|
||||||
xs, f
|
xs, f
|
||||||
end
|
end
|
||||||
@recipe f(fx::FuncOrFuncs, fy::FuncOrFuncs, u::AVec) = mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u)
|
@recipe function f{F<:Function}(fs::AbstractArray{F}, xmin::Number, xmax::Number)
|
||||||
@recipe f(fx::FuncOrFuncs, fy::FuncOrFuncs, umin::Number, umax::Number, n = 200) = fx, fy, linspace(umin, umax, n)
|
xs = Any[adapted_grid(f, (xmin, xmax)) for f in fs]
|
||||||
|
xs, fs
|
||||||
|
end
|
||||||
|
@recipe f{F<:Function,G<:Function}(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, u::AVec) = mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u)
|
||||||
|
@recipe f{F<:Function,G<:Function}(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, umin::Number, umax::Number, n = 200) = fx, fy, linspace(umin, umax, n)
|
||||||
|
|
||||||
#
|
#
|
||||||
# # special handling... 3D parametric function(s)
|
# # special handling... 3D parametric function(s)
|
||||||
@recipe function f(fx::FuncOrFuncs, fy::FuncOrFuncs, fz::FuncOrFuncs, u::AVec)
|
@recipe function f{F<:Function,G<:Function,H<:Function}(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, fz::FuncOrFuncs{H}, u::AVec)
|
||||||
mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u), mapFuncOrFuncs(fz, u)
|
mapFuncOrFuncs(fx, u), mapFuncOrFuncs(fy, u), mapFuncOrFuncs(fz, u)
|
||||||
end
|
end
|
||||||
@recipe function f(fx::FuncOrFuncs, fy::FuncOrFuncs, fz::FuncOrFuncs, umin::Number, umax::Number, numPoints = 200)
|
@recipe function f{F<:Function,G<:Function,H<:Function}(fx::FuncOrFuncs{F}, fy::FuncOrFuncs{G}, fz::FuncOrFuncs{H}, umin::Number, umax::Number, numPoints = 200)
|
||||||
fx, fy, fz, linspace(umin, umax, numPoints)
|
fx, fy, fz, linspace(umin, umax, numPoints)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -265,7 +265,7 @@ maketuple(x::Real) = (x,x)
|
|||||||
maketuple{T,S}(x::Tuple{T,S}) = x
|
maketuple{T,S}(x::Tuple{T,S}) = x
|
||||||
|
|
||||||
mapFuncOrFuncs(f::Function, u::AVec) = map(f, u)
|
mapFuncOrFuncs(f::Function, u::AVec) = map(f, u)
|
||||||
mapFuncOrFuncs(fs::AVec{Function}, u::AVec) = [map(f, u) for f in fs]
|
mapFuncOrFuncs{F<:Function}(fs::AVec{F}, u::AVec) = [map(f, u) for f in fs]
|
||||||
|
|
||||||
unzip{X,Y}(xy::AVec{Tuple{X,Y}}) = [t[1] for t in xy], [t[2] for t in xy]
|
unzip{X,Y}(xy::AVec{Tuple{X,Y}}) = [t[1] for t in xy], [t[2] for t in xy]
|
||||||
unzip{X,Y,Z}(xyz::AVec{Tuple{X,Y,Z}}) = [t[1] for t in xyz], [t[2] for t in xyz], [t[3] for t in xyz]
|
unzip{X,Y,Z}(xyz::AVec{Tuple{X,Y,Z}}) = [t[1] for t in xyz], [t[2] for t in xyz], [t[3] for t in xyz]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user