make dpi change plot size
This commit is contained in:
parent
84ec8d61ae
commit
4847752ef4
@ -543,7 +543,8 @@ end
|
|||||||
function gr_display(plt::Plot, fmt="")
|
function gr_display(plt::Plot, fmt="")
|
||||||
GR.clearws()
|
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
|
# collect some monitor/display sizes in meters and pixels
|
||||||
display_width_meters, display_height_meters, display_width_px, display_height_px = GR.inqdspsize()
|
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]
|
gr_plot_size[:] = [w, h]
|
||||||
if w > h
|
if w > h
|
||||||
ratio = float(h) / w
|
ratio = float(h) / w
|
||||||
msize = display_width_ratio * w
|
msize = display_width_ratio * w * dpi_factor
|
||||||
GR.setwsviewport(0, msize, 0, msize * ratio)
|
GR.setwsviewport(0, msize, 0, msize * ratio)
|
||||||
GR.setwswindow(0, 1, 0, ratio)
|
GR.setwswindow(0, 1, 0, ratio)
|
||||||
viewport_canvas[3] *= ratio
|
viewport_canvas[3] *= ratio
|
||||||
viewport_canvas[4] *= ratio
|
viewport_canvas[4] *= ratio
|
||||||
else
|
else
|
||||||
ratio = float(w) / h
|
ratio = float(w) / h
|
||||||
msize = display_height_ratio * h
|
msize = display_height_ratio * h * dpi_factor
|
||||||
GR.setwsviewport(0, msize * ratio, 0, msize)
|
GR.setwsviewport(0, msize * ratio, 0, msize)
|
||||||
GR.setwswindow(0, ratio, 0, 1)
|
GR.setwswindow(0, ratio, 0, 1)
|
||||||
viewport_canvas[1] *= ratio
|
viewport_canvas[1] *= ratio
|
||||||
@ -621,14 +622,14 @@ function gr_get_ticks_size(ticks, i)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function _update_min_padding!(sp::Subplot{GRBackend})
|
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 !haskey(ENV, "GKSwstype")
|
||||||
if isijulia() || (isdefined(Main, :Juno) && Juno.isactive())
|
if isijulia() || (isdefined(Main, :Juno) && Juno.isactive())
|
||||||
ENV["GKSwstype"] = "svg"
|
ENV["GKSwstype"] = "svg"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# Add margin given by the user
|
# Add margin given by the user
|
||||||
leftpad = 2mm + sp[:left_margin]
|
leftpad = 4mm + sp[:left_margin]
|
||||||
toppad = 2mm + sp[:top_margin]
|
toppad = 2mm + sp[:top_margin]
|
||||||
rightpad = 4mm + sp[:right_margin]
|
rightpad = 4mm + sp[:right_margin]
|
||||||
bottompad = 2mm + sp[:bottom_margin]
|
bottompad = 2mm + sp[:bottom_margin]
|
||||||
@ -664,7 +665,7 @@ function _update_min_padding!(sp::Subplot{GRBackend})
|
|||||||
if sp[:yaxis][:guide] != ""
|
if sp[:yaxis][:guide] != ""
|
||||||
leftpad += 4mm
|
leftpad += 4mm
|
||||||
end
|
end
|
||||||
sp.minpad = Tuple(dpi * pad for pad in (leftpad, toppad, rightpad, bottompad))
|
sp.minpad = Tuple(dpi * [leftpad, toppad, rightpad, bottompad])
|
||||||
end
|
end
|
||||||
|
|
||||||
function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas)
|
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
|
# draw the axes
|
||||||
gr_set_font(tickfont(xaxis))
|
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)
|
if is3d(sp)
|
||||||
zmin, zmax = gr_lims(zaxis, true)
|
zmin, zmax = gr_lims(zaxis, true)
|
||||||
|
|||||||
@ -402,7 +402,7 @@ end
|
|||||||
|
|
||||||
# Create the window/figure for this backend.
|
# Create the window/figure for this backend.
|
||||||
function _create_backend_figure(plt::Plot{PyPlotBackend})
|
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?
|
# # reuse the current figure?
|
||||||
fig = if plt[:overwrite_figure]
|
fig = if plt[:overwrite_figure]
|
||||||
@ -955,10 +955,10 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend})
|
|||||||
w, h = plt[:size]
|
w, h = plt[:size]
|
||||||
fig = plt.o
|
fig = plt.o
|
||||||
fig[:clear]()
|
fig[:clear]()
|
||||||
dpi = 100 * plt[:thickness_scaling] * plt[:dpi] / DPI
|
dpi = plt[:thickness_scaling] * plt[:dpi]
|
||||||
fig[:set_size_inches](w/dpi, h/dpi, forward = true)
|
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_facecolor_sym](py_color(plt[:background_color_outside]))
|
||||||
fig[:set_dpi](dpi)
|
fig[:set_dpi](plt[:dpi])
|
||||||
|
|
||||||
# resize the window
|
# resize the window
|
||||||
PyPlot.plt[:get_current_fig_manager]()[:resize](w, h)
|
PyPlot.plt[:get_current_fig_manager]()[:resize](w, h)
|
||||||
@ -1209,7 +1209,9 @@ function _update_min_padding!(sp::Subplot{PyPlotBackend})
|
|||||||
rightpad += sp[:right_margin]
|
rightpad += sp[:right_margin]
|
||||||
bottompad += sp[:bottom_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
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -1358,7 +1360,7 @@ for (mime, fmt) in _pyplot_mimeformats
|
|||||||
# figsize = map(px2inch, plt[:size]),
|
# figsize = map(px2inch, plt[:size]),
|
||||||
facecolor = fig[:get_facecolor](),
|
facecolor = fig[:get_facecolor](),
|
||||||
edgecolor = "none",
|
edgecolor = "none",
|
||||||
dpi = 100 * plt[:thickness_scaling] * plt[:dpi] / DPI
|
dpi = plt[:dpi] * plt[:thickness_scaling]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -325,16 +325,19 @@ end
|
|||||||
# temporarily overwrite size to be Atom.plotsize
|
# temporarily overwrite size to be Atom.plotsize
|
||||||
sz = plt[:size]
|
sz = plt[:size]
|
||||||
dpi = plt[:dpi]
|
dpi = plt[:dpi]
|
||||||
|
thickness_scaling = plt[:thickness_scaling]
|
||||||
jsize = Juno.plotsize()
|
jsize = Juno.plotsize()
|
||||||
jsize[1] == 0 && (jsize[1] = 400)
|
jsize[1] == 0 && (jsize[1] = 400)
|
||||||
jsize[2] == 0 && (jsize[2] = 500)
|
jsize[2] == 0 && (jsize[2] = 500)
|
||||||
|
|
||||||
scale = minimum(jsize[i] / sz[i] for i in 1:2)
|
scale = minimum(jsize[i] / sz[i] for i in 1:2)
|
||||||
plt[:size] = (s * scale for s in sz)
|
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)))
|
Juno.render(pane, HTML(stringmime(MIME("text/html"), plt)))
|
||||||
plt[:size] = sz
|
plt[:size] = sz
|
||||||
plt[:dpi] = dpi
|
plt[:dpi] = dpi
|
||||||
|
plt[:thickness_scaling] = thickness_scaling
|
||||||
end
|
end
|
||||||
# special handling for PlotlyJS
|
# special handling for PlotlyJS
|
||||||
function Juno.render(pane::Juno.PlotPane, plt::Plot{PlotlyJSBackend})
|
function Juno.render(pane::Juno.PlotPane, plt::Plot{PlotlyJSBackend})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user