From 4847752ef45757839eb0eb826299a0eb8eaf6db1 Mon Sep 17 00:00:00 2001 From: Daniel Schwabeneder Date: Sat, 16 Jun 2018 19:24:58 +0200 Subject: [PATCH] make dpi change plot size --- src/backends/gr.jl | 15 ++++++++------- src/backends/pyplot.jl | 14 ++++++++------ src/output.jl | 5 ++++- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/backends/gr.jl b/src/backends/gr.jl index 1a4400b5..74a3dd62 100644 --- a/src/backends/gr.jl +++ b/src/backends/gr.jl @@ -543,7 +543,8 @@ end function gr_display(plt::Plot, fmt="") GR.clearws() - _gr_dpi_factor[1] = plt[:dpi] / DPI * plt[:thickness_scaling] + _gr_dpi_factor[1] = plt[:thickness_scaling] + dpi_factor = plt[:dpi] ./ Plots.DPI # collect some monitor/display sizes in meters and pixels display_width_meters, display_height_meters, display_width_px, display_height_px = GR.inqdspsize() @@ -556,14 +557,14 @@ function gr_display(plt::Plot, fmt="") gr_plot_size[:] = [w, h] if w > h ratio = float(h) / w - msize = display_width_ratio * w + msize = display_width_ratio * w * dpi_factor GR.setwsviewport(0, msize, 0, msize * ratio) GR.setwswindow(0, 1, 0, ratio) viewport_canvas[3] *= ratio viewport_canvas[4] *= ratio else ratio = float(w) / h - msize = display_height_ratio * h + msize = display_height_ratio * h * dpi_factor GR.setwsviewport(0, msize * ratio, 0, msize) GR.setwswindow(0, ratio, 0, 1) viewport_canvas[1] *= ratio @@ -621,14 +622,14 @@ function gr_get_ticks_size(ticks, i) end function _update_min_padding!(sp::Subplot{GRBackend}) - dpi = sp.plt[:thickness_scaling] * sp.plt[:dpi] / Plots.DPI + dpi = sp.plt[:thickness_scaling] if !haskey(ENV, "GKSwstype") if isijulia() || (isdefined(Main, :Juno) && Juno.isactive()) ENV["GKSwstype"] = "svg" end end # Add margin given by the user - leftpad = 2mm + sp[:left_margin] + leftpad = 4mm + sp[:left_margin] toppad = 2mm + sp[:top_margin] rightpad = 4mm + sp[:right_margin] bottompad = 2mm + sp[:bottom_margin] @@ -664,7 +665,7 @@ function _update_min_padding!(sp::Subplot{GRBackend}) if sp[:yaxis][:guide] != "" leftpad += 4mm end - sp.minpad = Tuple(dpi * pad for pad in (leftpad, toppad, rightpad, bottompad)) + sp.minpad = Tuple(dpi * [leftpad, toppad, rightpad, bottompad]) end function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) @@ -765,7 +766,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas) # draw the axes gr_set_font(tickfont(xaxis)) - GR.setlinewidth(sp.plt[:thickness_scaling] * sp.plt[:dpi] / Plots.DPI) + GR.setlinewidth(sp.plt[:thickness_scaling]) if is3d(sp) zmin, zmax = gr_lims(zaxis, true) diff --git a/src/backends/pyplot.jl b/src/backends/pyplot.jl index c6341549..5d3e5a23 100644 --- a/src/backends/pyplot.jl +++ b/src/backends/pyplot.jl @@ -402,7 +402,7 @@ end # Create the window/figure for this backend. function _create_backend_figure(plt::Plot{PyPlotBackend}) - w,h = map(px2inch, plt[:size]) + w,h = map(px2inch, Tuple(s * plt[:dpi] / Plots.DPI for s in plt[:size])) # # reuse the current figure? fig = if plt[:overwrite_figure] @@ -955,10 +955,10 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend}) w, h = plt[:size] fig = plt.o fig[:clear]() - dpi = 100 * plt[:thickness_scaling] * plt[:dpi] / DPI - fig[:set_size_inches](w/dpi, h/dpi, forward = true) + dpi = plt[:thickness_scaling] * plt[:dpi] + fig[:set_size_inches](w/DPI/plt[:thickness_scaling], h/DPI/plt[:thickness_scaling], forward = true) fig[set_facecolor_sym](py_color(plt[:background_color_outside])) - fig[:set_dpi](dpi) + fig[:set_dpi](plt[:dpi]) # resize the window PyPlot.plt[:get_current_fig_manager]()[:resize](w, h) @@ -1209,7 +1209,9 @@ function _update_min_padding!(sp::Subplot{PyPlotBackend}) rightpad += sp[:right_margin] bottompad += sp[:bottom_margin] - sp.minpad = (leftpad, toppad, rightpad, bottompad) + dpi_factor = sp.plt[:thickness_scaling] * Plots.DPI / sp.plt[:dpi] + + sp.minpad = Tuple(dpi_factor .* [leftpad, toppad, rightpad, bottompad]) end @@ -1358,7 +1360,7 @@ for (mime, fmt) in _pyplot_mimeformats # figsize = map(px2inch, plt[:size]), facecolor = fig[:get_facecolor](), edgecolor = "none", - dpi = 100 * plt[:thickness_scaling] * plt[:dpi] / DPI + dpi = plt[:dpi] * plt[:thickness_scaling] ) end end diff --git a/src/output.jl b/src/output.jl index 4d64f85d..0e17894f 100644 --- a/src/output.jl +++ b/src/output.jl @@ -325,16 +325,19 @@ end # temporarily overwrite size to be Atom.plotsize sz = plt[:size] dpi = plt[:dpi] + thickness_scaling = plt[:thickness_scaling] jsize = Juno.plotsize() jsize[1] == 0 && (jsize[1] = 400) jsize[2] == 0 && (jsize[2] = 500) scale = minimum(jsize[i] / sz[i] for i in 1:2) plt[:size] = (s * scale for s in sz) - plt[:dpi] *= scale + plt[:dpi] = 100 + plt[:thickness_scaling] *= scale Juno.render(pane, HTML(stringmime(MIME("text/html"), plt))) plt[:size] = sz plt[:dpi] = dpi + plt[:thickness_scaling] = thickness_scaling end # special handling for PlotlyJS function Juno.render(pane::Juno.PlotPane, plt::Plot{PlotlyJSBackend})