Check if plot title already exists before adding again (#4027)

* Check if plot title already exists before adding again

* Add plot title tests
This commit is contained in:
Pearl Li 2022-01-12 05:52:43 -08:00 committed by Zhanibek
parent 34dc85078f
commit 017fcb560e
2 changed files with 37 additions and 14 deletions

View File

@ -277,26 +277,35 @@ end
function _add_plot_title!(plt) function _add_plot_title!(plt)
plot_title = plt[:plot_title] plot_title = plt[:plot_title]
if plot_title != "" if plot_title != ""
the_layout = plt.layout # make new subplot for plot title
vspan = plt[:plot_titlevspan] if plt[:plot_titleindex] == 0
plt.layout = grid(2, 1, heights = (vspan, 1 - vspan)) the_layout = plt.layout
plt.layout.grid[1, 1] = subplot = Subplot(plt.backend, parent = plt.layout[1, 1]) vspan = plt[:plot_titlevspan]
plt.layout.grid[2, 1] = the_layout plt.layout = grid(2, 1, heights = (vspan, 1 - vspan))
subplot.plt = plt plt.layout.grid[1, 1] = subplot = Subplot(plt.backend, parent = plt.layout[1, 1])
plt.layout.grid[2, 1] = the_layout
subplot.plt = plt
top = plt.backend isa PyPlotBackend ? nothing : 0mm
bot = 0mm
plt[:force_minpad] = nothing, top, nothing, bot
subplot[:subplot_index] = last(plt.subplots)[:subplot_index] + 1
plt[:plot_titleindex] = subplot[:subplot_index]
subplot[:framestyle] = :none
subplot[:margin] = 0px
push!(plt.subplots, subplot)
end
# propagate arguments plt[:plot_titleXXX] --> subplot[:titleXXX] # propagate arguments plt[:plot_titleXXX] --> subplot[:titleXXX]
plot_titleindex = plt[:plot_titleindex]
subplot = plt.subplots[plot_titleindex]
for sym in filter(x -> startswith(string(x), "plot_title"), keys(_plot_defaults)) for sym in filter(x -> startswith(string(x), "plot_title"), keys(_plot_defaults))
subplot[Symbol(string(sym)[(length("plot_") + 1):end])] = plt[sym] subplot[Symbol(string(sym)[(length("plot_") + 1):end])] = plt[sym]
end end
top = plt.backend isa PyPlotBackend ? nothing : 0mm
bot = 0mm
plt[:force_minpad] = nothing, top, nothing, bot
subplot[:subplot_index] = last(plt.subplots)[:subplot_index] + 1
plt[:plot_titleindex] = subplot[:subplot_index]
subplot[:framestyle] = :none
subplot[:margin] = 0px
push!(plt.subplots, subplot)
end end
return nothing return nothing
end end

View File

@ -11,3 +11,17 @@ using Plots, Test
@test pl[3][:yaxis][:scale] == :log10 @test pl[3][:yaxis][:scale] == :log10
@test pl[4][:yaxis][:scale] == :log10 @test pl[4][:yaxis][:scale] == :log10
end end
@testset "Plot title" begin
pl = plot(rand(4, 8), layout = 4, plot_title = "My title")
@test pl[:plot_title] == "My title"
@test pl[:plot_titleindex] == 5
plot!(pl)
@test pl[:plot_title] == "My title"
@test pl[:plot_titleindex] == 5
plot!(pl, plot_title = "My new title")
@test pl[:plot_title] == "My new title"
@test pl[:plot_titleindex] == 5
end