Compare commits

...

6 Commits

Author SHA1 Message Date
Simon Christ c046e6461f 1.19.1 [skip ci] 2021-07-15 09:33:28 +02:00
t-bltg 411de69765 fix plot_title for pyplot (#3642)
Co-authored-by: t-bltg <t-bltg@users.noreply.github.com>
2021-07-14 22:01:20 +02:00
Simon Christ 4bc6412b46 1.19.0 [skip ci] 2021-07-14 15:51:23 +02:00
Simon Christ 798de8b17c add the plot_title (#2690)
* add the plot_title

* Update bbs/plot_title (#3604)

* add the plot_title

* update plot_title for multiple subplots, fix GR warning

Co-authored-by: Simon Christ <SimonChrist@gmx.de>
Co-authored-by: t-bltg <t-bltg@users.noreply.github.com>

* Update plot_title (#3608)

* add the plot_title

* update plot_title for multiple subplots, fix GR warning

* update plot_title

* consistency with _subplot_defaults

Co-authored-by: Simon Christ <SimonChrist@gmx.de>
Co-authored-by: t-bltg <t-bltg@users.noreply.github.com>

* custom implementation for pgfplotsx backend

* remove `@show`

* remove superfluous plot_titleindex

Co-authored-by: t-bltg <13423344+t-bltg@users.noreply.github.com>
Co-authored-by: t-bltg <t-bltg@users.noreply.github.com>
2021-07-14 15:45:53 +02:00
t-bltg b0ff0e58b3 InspectDR: Skip more unsupported examples 2021-07-11 21:43:39 +02:00
t-bltg 5cca5e9148 GR: mesh3d, take into account series line attributes 2021-07-11 04:36:22 +02:00
8 changed files with 73 additions and 19 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
name = "Plots"
uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
author = ["Tom Breloff (@tbreloff)"]
version = "1.18.2"
version = "1.19.1"
[deps]
Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
+2 -1
View File
@@ -53,7 +53,8 @@ const _arg_desc = KW(
:colorbar_entry => "Bool. Include this series in the color bar? Set to `false` to exclude.",
# plot args
:plot_title => "String. Title for the whole plot (not the subplots) (Note: Not currently implemented)",
:plot_title => "String. Title for the whole plot (not the subplots)",
:plot_titlevspan => "Number in [0,1]. Vertical span of the whole plot title (fraction of the plot height)",
:background_color => "Color Type. Base color for all backgrounds.",
:background_color_outside => "Color Type or `:match` (matches `:background_color`). Color outside the plot area(s)",
:foreground_color => "Color Type. Base color for all foregrounds.",
+3 -1
View File
@@ -331,13 +331,15 @@ const _series_defaults = KW(
const _plot_defaults = KW(
:plot_title => "",
:plot_titleindex => 0,
:plot_titlefontsize => 16,
:plot_title_location => :center, # also :left or :right
:plot_titlelocation => :center, # also :left or :right
:plot_titlefontfamily => :match,
:plot_titlefonthalign => :hcenter,
:plot_titlefontvalign => :vcenter,
:plot_titlefontrotation => 0.0,
:plot_titlefontcolor => :match,
:plot_titlevspan => 0.05, # vertical span of the plot title, here 5%
:background_color => colorant"white", # default for all backgrounds,
:background_color_outside => :match, # background outside grid,
:foreground_color => :auto, # default for all foregrounds, and title color,
+1
View File
@@ -1897,6 +1897,7 @@ function gr_draw_surface(series, x, y, z, clims)
Y[o] = y[k]
Z[o] = z[k]
end
gr_set_line(get_linewidth(series), get_linestyle(series), get_linecolor(series), series)
GR.polyline3d(X, Y, Z)
else
throw(ArgumentError("Not handled !"))
+28 -15
View File
@@ -118,11 +118,22 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
end
for sp in plt.subplots
bb1 = sp.plotarea
bb2 = bbox(sp)
dx, dy = bb2.x0
sp_width = width(bb2)
sp_height = height(bb2)
if sp[:subplot_index] == plt[:plot_titleindex]
x = dx + sp_width / 2 - 10mm # FIXME: get rid of magic constant
y = dy + sp_height / 2
pgfx_add_annotation!(the_plot, x, y, PlotText(plt[:plot_title], plottitlefont(plt)), pgfx_thickness_scaling(plt);
cs = "",
options = PGFPlotsX.Options("anchor" => "center")
)
continue
end
sp_width = width(bb2)
sp_height = height(bb2)
dx, dy = bb2.x0
lpad = leftpad(sp) + sp[:left_margin]
rpad = rightpad(sp) + sp[:right_margin]
tpad = toppad(sp) + sp[:top_margin]
@@ -131,7 +142,6 @@ function (pgfx_plot::PGFPlotsXPlot)(plt::Plot{PGFPlotsXBackend})
dy += tpad
axis_height = sp_height - (tpad + bpad)
axis_width = sp_width - (rpad + lpad)
title_cstr = plot_color(sp[:titlefontcolor])
title_a = alpha(title_cstr)
title_loc = sp[:titlelocation]
@@ -999,24 +1009,27 @@ function pgfx_marker(plotattributes, i = 1)
)
end
function pgfx_add_annotation!(o, x, y, val, thickness_scaling = 1)
function pgfx_add_annotation!(o, x, y, val, thickness_scaling = 1; cs = "axis cs:", options = PGFPlotsX.Options())
# Construct the style string.
cstr = val.font.color
a = alpha(cstr)
push!(
o,
[
join([
"\\node",
PGFPlotsX.Options(
get((center = "", left = "right", right = "left"), val.font.halign, "") =>
nothing,
"color" => cstr,
"draw opacity" => convert(Float16, a),
"rotate" => val.font.rotation,
"font" => pgfx_font(val.font.pointsize, thickness_scaling),
),
" at (axis cs:$x, $y) {$(val.str)};",
],
sprint(PGFPlotsX.print_tex, merge(
PGFPlotsX.Options(
get((hcenter = "", left = "right", right = "left"), val.font.halign, "") =>
nothing,
"color" => cstr,
"draw opacity" => convert(Float16, a),
"rotate" => val.font.rotation,
"font" => pgfx_font(val.font.pointsize, thickness_scaling),
),
options
)),
string(" at (", cs, x, ",", y, ") {", val.str, "};"),
]),
)
end
+1 -1
View File
@@ -1241,7 +1241,7 @@ _backend_skips = Dict(
49, # polar heatmap
51, # image with custom axes
],
:inspectdr => [6, 10, 22, 28, 38, 43, 45, 47, 49, 50, 51, 55],
:inspectdr => [4, 6, 10, 22, 24, 28, 30, 38, 43, 45, 47, 48, 49, 50, 51, 55],
:unicodeplots => [6, 10, 22, 24, 28, 38, 43, 45, 47, 49, 50, 51, 55],
)
+26
View File
@@ -262,6 +262,7 @@ function _subplot_setup(plt::Plot, plotattributes::AKW, kw_list::Vector{KW})
sp_attrs[sp] = attr
end
_add_plot_title!(plt)
# override subplot/axis args. `sp_attrs` take precendence
for (idx, sp) in enumerate(plt.subplots)
attr = if !haskey(plotattributes, :subplot) || plotattributes[:subplot] == idx
@@ -274,12 +275,37 @@ function _subplot_setup(plt::Plot, plotattributes::AKW, kw_list::Vector{KW})
# do we need to link any axes together?
link_axes!(plt.layout, plt[:link])
return nothing
end
function series_idx(kw_list::AVec{KW}, kw::AKW)
Int(kw[:series_plotindex]) - Int(kw_list[1][:series_plotindex]) + 1
end
function _add_plot_title!(plt)
plot_title = plt[:plot_title]
if plot_title != ""
the_layout = plt.layout
vspan = plt[:plot_titlevspan]
plt.layout = grid(2, 1, heights=(vspan, 1 - vspan))
plt.layout.grid[1, 1] = subplot = Subplot(plt.backend, parent=plt.layout[1, 1])
plt.layout.grid[2, 1] = the_layout
subplot.plt = plt
# propagate arguments plt[:plot_titleXXX] --> subplot[:titleXXX]
for sym filter(x -> startswith(string(x), "plot_title"), keys(_plot_defaults))
subplot[Symbol(string(sym)[length("plot_") + 1:end])] = plt[sym]
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
return nothing
end
## Series recipes
+11
View File
@@ -160,6 +160,7 @@ function plot!(plt1::Plot, plt2::Plot, plts_tail::Plot...; kw...)
cmdidx += 1
end
end
_add_plot_title!(plt)
# first apply any args for the subplots
for (idx,sp) in enumerate(plt.subplots)
@@ -225,6 +226,16 @@ function prepare_output(plt::Plot)
_update_min_padding!(sp)
end
# spedific to :plot_title see _add_plot_title!
force_minpad = get(plt, :force_minpad, ())
if !isempty(force_minpad)
for i eachindex(plt.layout.grid)
plt.layout.grid[i].minpad = Tuple(
i === nothing ? j : i for (i, j) zip(force_minpad, plt.layout.grid[i].minpad)
)
end
end
# now another pass down, to update the bounding boxes
update_child_bboxes!(plt.layout)