ported series coordinates code
This commit is contained in:
parent
f032b40aec
commit
ef8f9f0713
@ -508,7 +508,7 @@ function pgfx_add_series!(::Val{:path}, axis, series_opt, series, series_func, o
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if i == 1 &&
|
if i == 1 &&
|
||||||
sp[:legend] != :none && pgfx_should_add_to_legend(series)
|
series[:subplot][:legend] != :none && pgfx_should_add_to_legend(series)
|
||||||
pgfx_filllegend!(series_opt, opt)
|
pgfx_filllegend!(series_opt, opt)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -535,6 +535,140 @@ function pgfx_add_series!(::Val{:path}, axis, series_opt, series, series_func, o
|
|||||||
end # for segments
|
end # for segments
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:scatter}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "only marks" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:straightline}, axis, series_opt, series, series_func, opt)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:path3d}, axis, series_opt, series, series_func, opt)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:scatter3d}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "only marks" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:surface}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(
|
||||||
|
series_opt,
|
||||||
|
"surf" => nothing,
|
||||||
|
"mesh/rows" => length(opt[:x]),
|
||||||
|
"mesh/cols" => length(opt[:y]),
|
||||||
|
"z buffer" => "sort",
|
||||||
|
)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:wireframe}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "mesh" => nothing,
|
||||||
|
"mesh/rows" => length(opt[:x])
|
||||||
|
)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:heatmap}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(
|
||||||
|
series_opt,
|
||||||
|
"matrix plot*" => nothing,
|
||||||
|
"mesh/rows" => length(opt[:x]),
|
||||||
|
"mesh/cols" => length(opt[:y]),
|
||||||
|
)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:contour}, axis, series_opt, series, series_func, opt)
|
||||||
|
if isfilledcontour(series)
|
||||||
|
pgfx_add_series!(Val(:filledcontour), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
push!(
|
||||||
|
series_opt,
|
||||||
|
"contour prepared" => PGFPlotsX.Options("labels" => opt[:contour_labels]),
|
||||||
|
)
|
||||||
|
args = pgfx_series_arguments(series, opt)
|
||||||
|
series_plot = series_func(series_opt, PGFPlotsX.Table(Contour.contours(args..., opt[:levels])))
|
||||||
|
push!(axis, series_plot)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:filledcontour}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(
|
||||||
|
series_opt,
|
||||||
|
"contour filled" => PGFPlotsX.Options(), # labels not supported
|
||||||
|
"patch type" => "bilinear",
|
||||||
|
"shader" => "flat",
|
||||||
|
)
|
||||||
|
if opt[:levels] isa Number
|
||||||
|
push!(segment_opt["contour filled"], "number" => opt[:levels])
|
||||||
|
elseif opt[:levels] isa AVec
|
||||||
|
push!(segment_opt["contour filled"], "levels" => opt[:levels])
|
||||||
|
end
|
||||||
|
|
||||||
|
args = pgfx_series_arguments(series, opt)
|
||||||
|
series_plot = series_func(series_opt, PGFPlotsX.Coordinates(args...))
|
||||||
|
push!(axis, series_plot)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:contour3d}, axis, series_opt, series, series_func, opt)
|
||||||
|
pgfx_add_series!(Val(:contour), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:quiver}, axis, series_opt, series, series_func, opt)
|
||||||
|
if opt[:quiver] !== nothing
|
||||||
|
push!(
|
||||||
|
series_opt,
|
||||||
|
"quiver" => PGFPlotsX.Options(
|
||||||
|
"u" => "\\thisrow{u}",
|
||||||
|
"v" => "\\thisrow{v}",
|
||||||
|
pgfx_arrow(opt[:arrow]) => nothing,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
x = opt[:x]
|
||||||
|
y = opt[:y]
|
||||||
|
table = PGFPlotsX.Table([
|
||||||
|
:x => x,
|
||||||
|
:y => y,
|
||||||
|
:u => opt[:quiver][1],
|
||||||
|
:v => opt[:quiver][2],
|
||||||
|
])
|
||||||
|
end
|
||||||
|
series_plot = series_func(series_opt, table)
|
||||||
|
push!(axis, series_plot)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:shape}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "area legend" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:steppre}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "const plot mark right" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:stepmid}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "const plot mark mid" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:steppost}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "const plot" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:ysticks}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "ycomb" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgfx_add_series!(::Val{:xsticks}, axis, series_opt, series, series_func, opt)
|
||||||
|
push!(series_opt, "xcomb" => nothing)
|
||||||
|
pgfx_add_series!(Val(:path), axis, series_opt, series, series_func, opt)
|
||||||
|
end
|
||||||
|
|
||||||
function pgfx_add_legend!(axis, series, opt, i = 1)
|
function pgfx_add_legend!(axis, series, opt, i = 1)
|
||||||
if series[:subplot][:legend] != :none
|
if series[:subplot][:legend] != :none
|
||||||
leg_entry = if opt[:label] isa AVec
|
leg_entry = if opt[:label] isa AVec
|
||||||
@ -579,160 +713,6 @@ function pgfx_series_arguments(series, opt)
|
|||||||
opt[:x], opt[:y]
|
opt[:x], opt[:y]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@inline function pgfx_series_coordinates!(sp, series, segment_opt, opt, rng)
|
|
||||||
st = series[:seriestype]
|
|
||||||
# function args
|
|
||||||
args = if st in (:contour, :contour3d)
|
|
||||||
opt[:x], opt[:y], Array(opt[:z])'
|
|
||||||
elseif st in (:heatmap, :surface, :wireframe)
|
|
||||||
surface_to_vecs(opt[:x], opt[:y], opt[:z])
|
|
||||||
elseif RecipesPipeline.is3d(st)
|
|
||||||
opt[:x], opt[:y], opt[:z]
|
|
||||||
elseif st == :straightline
|
|
||||||
straightline_data(series)
|
|
||||||
elseif st == :shape
|
|
||||||
shape_data(series)
|
|
||||||
elseif ispolar(sp)
|
|
||||||
theta, r = opt[:x], opt[:y]
|
|
||||||
rad2deg.(theta), r
|
|
||||||
else
|
|
||||||
opt[:x], opt[:y]
|
|
||||||
end
|
|
||||||
seg_args = if st in (:contour, :contour3d)
|
|
||||||
args
|
|
||||||
else
|
|
||||||
(arg[rng] for arg in args)
|
|
||||||
end
|
|
||||||
if opt[:quiver] !== nothing
|
|
||||||
push!(
|
|
||||||
segment_opt,
|
|
||||||
"quiver" => PGFPlotsX.Options(
|
|
||||||
"u" => "\\thisrow{u}",
|
|
||||||
"v" => "\\thisrow{v}",
|
|
||||||
pgfx_arrow(opt[:arrow]) => nothing,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
x, y = collect(seg_args)
|
|
||||||
return PGFPlotsX.Table([
|
|
||||||
:x => x,
|
|
||||||
:y => y,
|
|
||||||
:u => opt[:quiver][1],
|
|
||||||
:v => opt[:quiver][2],
|
|
||||||
])
|
|
||||||
else
|
|
||||||
if isfilledcontour(series)
|
|
||||||
st = :filledcontour
|
|
||||||
end
|
|
||||||
pgfx_series_coordinates!(Val(st), segment_opt, opt, seg_args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(
|
|
||||||
st_val::Union{Val{:path},Val{:path3d},Val{:straightline}},
|
|
||||||
segment_opt,
|
|
||||||
opt,
|
|
||||||
args,
|
|
||||||
)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(
|
|
||||||
st_val::Union{Val{:scatter},Val{:scatter3d}},
|
|
||||||
segment_opt,
|
|
||||||
opt,
|
|
||||||
args,
|
|
||||||
)
|
|
||||||
push!(segment_opt, "only marks" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:heatmap}, segment_opt, opt, args)
|
|
||||||
push!(
|
|
||||||
segment_opt,
|
|
||||||
"matrix plot*" => nothing,
|
|
||||||
"mesh/rows" => length(opt[:x]),
|
|
||||||
"mesh/cols" => length(opt[:y]),
|
|
||||||
)
|
|
||||||
return PGFPlotsX.Table(args...)
|
|
||||||
end
|
|
||||||
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:steppre}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "const plot mark right" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:stepmid}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "const plot mark mid" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:steppost}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "const plot" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(
|
|
||||||
st_val::Union{Val{:ysticks},Val{:sticks}},
|
|
||||||
segment_opt,
|
|
||||||
opt,
|
|
||||||
args,
|
|
||||||
)
|
|
||||||
push!(segment_opt, "ycomb" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:xsticks}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "xcomb" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:surface}, segment_opt, opt, args)
|
|
||||||
push!(
|
|
||||||
segment_opt,
|
|
||||||
"surf" => nothing,
|
|
||||||
"mesh/rows" => length(opt[:x]),
|
|
||||||
"mesh/cols" => length(opt[:y]),
|
|
||||||
"z buffer" => "sort",
|
|
||||||
)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:volume}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "patch" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:wireframe}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "mesh" => nothing, "mesh/rows" => length(opt[:x]))
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(st_val::Val{:shape}, segment_opt, opt, args)
|
|
||||||
push!(segment_opt, "area legend" => nothing)
|
|
||||||
return PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(
|
|
||||||
st_val::Union{Val{:contour},Val{:contour3d}},
|
|
||||||
segment_opt,
|
|
||||||
opt,
|
|
||||||
args,
|
|
||||||
)
|
|
||||||
push!(
|
|
||||||
segment_opt,
|
|
||||||
"contour prepared" => PGFPlotsX.Options("labels" => opt[:contour_labels]),
|
|
||||||
)
|
|
||||||
return PGFPlotsX.Table(Contour.contours(args..., opt[:levels]))
|
|
||||||
end
|
|
||||||
function pgfx_series_coordinates!(
|
|
||||||
st_val::Val{:filledcontour},
|
|
||||||
segment_opt,
|
|
||||||
opt,
|
|
||||||
args,
|
|
||||||
)
|
|
||||||
xs, ys, zs = collect(args)
|
|
||||||
push!(
|
|
||||||
segment_opt,
|
|
||||||
"contour filled" => PGFPlotsX.Options(), # labels not supported
|
|
||||||
"patch type" => "bilinear",
|
|
||||||
"shader" => "flat",
|
|
||||||
)
|
|
||||||
if opt[:levels] isa Number
|
|
||||||
push!(segment_opt["contour filled"], "number" => opt[:levels])
|
|
||||||
elseif opt[:levels] isa AVec
|
|
||||||
push!(segment_opt["contour filled"], "levels" => opt[:levels])
|
|
||||||
end
|
|
||||||
|
|
||||||
PGFPlotsX.Coordinates(args...)
|
|
||||||
end
|
|
||||||
##
|
##
|
||||||
pgfx_get_linestyle(k) = get(
|
pgfx_get_linestyle(k) = get(
|
||||||
(
|
(
|
||||||
@ -1096,7 +1076,7 @@ function pgfx_fillrange_args(fillrange, x, y, z)
|
|||||||
x_fill = [x; x[n:-1:1]; x[1]]
|
x_fill = [x; x[n:-1:1]; x[1]]
|
||||||
y_fill = [y; y[n:-1:1]; x[1]]
|
y_fill = [y; y[n:-1:1]; x[1]]
|
||||||
z_fill = [z; _cycle(fillrange, n:-1:1); z[1]]
|
z_fill = [z; _cycle(fillrange, n:-1:1); z[1]]
|
||||||
return PGFPlotsX.Coordiantes(x_fill, y_fill, z_fill)
|
return PGFPlotsX.Coordinates(x_fill, y_fill, z_fill)
|
||||||
end
|
end
|
||||||
|
|
||||||
function pgfx_sanitize_string(p::PlotText)
|
function pgfx_sanitize_string(p::PlotText)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user