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/pipeline.jl b/src/pipeline.jl index 8dc475cb..931aa76e 100644 --- a/src/pipeline.jl +++ b/src/pipeline.jl @@ -357,10 +357,9 @@ end function _expand_subplot_extrema(sp::Subplot, d::KW, st::Symbol) # adjust extrema and discrete info if st == :image - w, h = size(d[:z]) - expand_extrema!(sp[:xaxis], (0,w)) - expand_extrema!(sp[:yaxis], (0,h)) - sp[:yaxis].d[:flip] = true + xmin, xmax = ignorenan_extrema(d[:x]); ymin, ymax = ignorenan_extrema(d[:y]) + expand_extrema!(sp[:xaxis], (xmin, xmax)) + expand_extrema!(sp[:yaxis], (ymin, ymax)) elseif !(st in (:pie, :histogram, :bins2d, :histogram2d)) expand_extrema!(sp, d) end diff --git a/src/series.jl b/src/series.jl index e545d485..1a502cc5 100644 --- a/src/series.jl +++ b/src/series.jl @@ -321,10 +321,12 @@ end n, m = size(mat) if is_seriestype_supported(:image) seriestype := :image + yflip --> true SliceIt, 1:m, 1:n, Surface(mat) else seriestype := :heatmap yflip --> true + cbar --> false fillcolor --> ColorGradient([:black, :white]) SliceIt, 1:m, 1:n, Surface(convert(Matrix{Float64}, mat)) end @@ -337,10 +339,12 @@ end if is_seriestype_supported(:image) seriestype := :image + yflip --> true SliceIt, 1:m, 1:n, Surface(mat) 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 +469,38 @@ 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 + yflip --> true + 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 + yflip --> true + 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 + # # # # --------------------------------------------------------------------