From d4075a1ef5ab99b0b1fb29cfd27cd8ec9906da5e Mon Sep 17 00:00:00 2001 From: Andrew Palugniok Date: Thu, 18 Jan 2018 16:22:49 +0000 Subject: [PATCH] Allow movement and resizing of images. --- src/backends/glvisualize.jl | 2 +- src/backends/gr.jl | 3 ++- src/backends/pyplot.jl | 4 +++- src/series.jl | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/backends/glvisualize.jl b/src/backends/glvisualize.jl index 8861fa46..b0841596 100644 --- a/src/backends/glvisualize.jl +++ b/src/backends/glvisualize.jl @@ -1215,7 +1215,7 @@ end function gl_image(img, kw_args) rect = kw_args[:primitive] - kw_args[:primitive] = GeometryTypes.SimpleRectangle{Float32}(rect.x, rect.y, rect.h, rect.w) # seems to be flipped + kw_args[:primitive] = GeometryTypes.SimpleRectangle{Float32}(rect.x, rect.y, rect.w, rect.h) visualize(img, Style(:default), kw_args) end diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 1ef54d63..89c3c355 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -1199,6 +1199,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) elseif st == :image z = transpose_z(series, series[:z].surf, true)' w, h = size(z) + xmin, xmax = ignorenan_extrema(series[:x]); ymin, ymax = ignorenan_extrema(series[:y]) if eltype(z) <: Colors.AbstractGray grey = round.(UInt8, float(z) * 255) rgba = map(c -> UInt32( 0xff000000 + Int(c)<<16 + Int(c)<<8 + Int(c) ), grey) @@ -1208,7 +1209,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) round(Int, green(c) * 255) << 8 + round(Int, red(c) * 255) ), z) end - GR.drawimage(0, w, h, 0, w, h, rgba) + GR.drawimage(xmin, xmax, ymax, ymin, w, h, rgba) end # this is all we need to add the series_annotations text diff --git a/src/backends/pyplot.jl b/src/backends/pyplot.jl index de899a3c..f3823e0a 100644 --- a/src/backends/pyplot.jl +++ b/src/backends/pyplot.jl @@ -731,6 +731,7 @@ function py_add_series(plt::Plot{PyPlotBackend}, series::Series) if st == :image # @show typeof(z) + xmin, xmax = ignorenan_extrema(series[:x]); ymin, ymax = ignorenan_extrema(series[:y]) img = Array(transpose_z(series, z.surf)) z = if eltype(img) <: Colors.AbstractGray float(img) @@ -743,7 +744,8 @@ function py_add_series(plt::Plot{PyPlotBackend}, series::Series) zorder = series[:series_plotindex], cmap = py_colormap([:black, :white]), vmin = 0.0, - vmax = 1.0 + vmax = 1.0, + extent = (xmin, xmax, ymax, ymin) ) push!(handles, handle) diff --git a/src/series.jl b/src/series.jl index e545d485..a727844c 100644 --- a/src/series.jl +++ b/src/series.jl @@ -325,6 +325,7 @@ end else seriestype := :heatmap yflip --> true + cbar --> false fillcolor --> ColorGradient([:black, :white]) SliceIt, 1:m, 1:n, Surface(convert(Matrix{Float64}, mat)) end @@ -341,6 +342,7 @@ end else seriestype := :heatmap yflip --> true + cbar --> false z, plotattributes[:fillcolor] = replace_image_with_heatmap(mat) SliceIt, 1:m, 1:n, Surface(z) end @@ -465,6 +467,36 @@ end SliceIt, x, y, Surface(z) end +# # images - grays + +@recipe function f(x::AVec, y::AVec, mat::AMat{T}) where T<:Gray + if is_seriestype_supported(:image) + seriestype := :image + SliceIt, x, y, Surface(mat) + else + seriestype := :heatmap + yflip --> true + cbar --> false + fillcolor --> ColorGradient([:black, :white]) + SliceIt, x, y, Surface(convert(Matrix{Float64}, mat)) + end +end + +# # images - colors + +@recipe function f(x::AVec, y::AVec, mat::AMat{T}) where T<:Colorant + if is_seriestype_supported(:image) + seriestype := :image + SliceIt, x, y, Surface(mat) + else + seriestype := :heatmap + yflip --> true + cbar --> false + z, plotattributes[:fillcolor] = replace_image_with_heatmap(mat) + SliceIt, x, y, Surface(z) + end +end + # # # # --------------------------------------------------------------------