From e88654cca5947dd265f71546580a8822a70168ce Mon Sep 17 00:00:00 2001 From: isentropic Date: Wed, 17 Jun 2020 18:17:18 +0900 Subject: [PATCH] pyplot colorbar positioning (#2772) --- src/backends/pyplot.jl | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/backends/pyplot.jl b/src/backends/pyplot.jl index e7ff3019..bd749497 100644 --- a/src/backends/pyplot.jl +++ b/src/backends/pyplot.jl @@ -1016,8 +1016,34 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend}) # width = axes_grid1.axes_size.AxesY(ax, aspect=1.0 / 3.5) # pad = axes_grid1.axes_size.Fraction(0.5, width) # Colorbar is spaced 0.5 of its size away from the ax # cbax = divider.append_axes("right", size=width, pad=pad) # This approach does not work well in subplots - cbax = divider.append_axes("right", size="5%", pad="2.5%") # Reasonable value works most of the usecases - cb = fig."colorbar"(handle; cax=cbax, kw...) + colorbar_position = "right" + colorbar_pad = "2.5%" + colorbar_orientation="vertical" + + if sp[:colorbar] == :left + colorbar_position = string(sp[:colorbar]) + colorbar_pad = "5%" + elseif sp[:colorbar] == :top + colorbar_position = string(sp[:colorbar]) + colorbar_pad = "2.5%" + colorbar_orientation="horizontal" + elseif sp[:colorbar] == :bottom + colorbar_position = string(sp[:colorbar]) + colorbar_pad = "5%" + colorbar_orientation="horizontal" + end + + cbax = divider.append_axes(colorbar_position, size="5%", pad=colorbar_pad) # Reasonable value works most of the usecases + cb = fig."colorbar"(handle; cax=cbax, orientation = colorbar_orientation, kw...) + + if sp[:colorbar] == :left + cbax.yaxis.set_ticks_position("left") + elseif sp[:colorbar] == :top + cbax.xaxis.set_ticks_position("top") + elseif sp[:colorbar] == :bottom + cbax.xaxis.set_ticks_position("bottom") + end + end cb."set_label"(sp[:colorbar_title],size=py_thickness_scale(plt, sp[:yaxis][:guidefontsize]),family=sp[:yaxis][:guidefontfamily], color = py_color(sp[:yaxis][:guidefontcolor]))