Added different possibility of plotting by creating blocks for each bar

This commit is contained in:
Bernd_Mac 2021-05-18 17:27:34 +02:00
parent 516cdb6b92
commit 148287402e

View File

@ -1007,6 +1007,7 @@ end
@recipe function f(::Type{Val{:bins3d}}, x, y, z) @recipe function f(::Type{Val{:bins3d}}, x, y, z)
edge_x, edge_y, weights = x, y, z.surf edge_x, edge_y, weights = x, y, z.surf
# Create the bins
if !plotattributes[:show_empty_bins] if !plotattributes[:show_empty_bins]
edge_x = repeat(edge_x,inner=(4))[2:end-1] edge_x = repeat(edge_x,inner=(4))[2:end-1]
edge_y = repeat(edge_y,inner=(4))[2:end-1] edge_y = repeat(edge_y,inner=(4))[2:end-1]
@ -1024,19 +1025,62 @@ end
float_weights[2:end-1,2:end-1] .= repeat(float(weights),inner=(2,2)) float_weights[2:end-1,2:end-1] .= repeat(float(weights),inner=(2,2))
end end
# pyplot can't handle sparse arrays it seems
# Maybe get rid off sparse arrays at all, but if any bins-entry is large the additional points for plotting may use up a lot of memory otherwise for zeros and NaNs
if backend_name() == :pyplot
float_weights = Surface(permutedims(Array(float_weights)))
else
float_weights = Surface(permutedims(float_weights))
end
# Handle input of one seriescolor only (maybe exchangeable by get_series_color()?)
if isa(plotattributes[:seriescolor], Symbol) && plotattributes[:seriescolor] != :auto
seriescolor := cgrad([plotattributes[:seriescolor], plotattributes[:seriescolor]])
end
seriestype := :surface
colorbar := false
x := edge_x x := edge_x
y := edge_y y := edge_y
z := Surface(permutedims(float_weights)) z := float_weights
#seriescolor := cgrad([:blue,:blue])
colorbar := false
seriestype := :surface
linealpha := 1.0
linecolor := :black
() ()
end
Plots.@deps bins3d surface #wireframe mesh3d
@recipe function f(::Type{Val{:bricks3d}}, x, y, z)
edge_x, edge_y, weights = x, y, z.surf
x_step = edge_x[2] - edge_x[1]
y_step = edge_y[2] - edge_y[1]
x_len = length(x)
y_len = length(y)
temp_x = vec([0.0 0.0 1.0 1.0]).*x_step .+ edge_x'
temp_y = vec([1.0 1.0 0.0 0.0]).*y_step .+ edge_y'
z_help = [1.0 0.0 0.0 1.0;
0.0 1.0 1.0 0.0;
0.0 1.0 1.0 0.0;
1.0 0.0 0.0 1.0];
for (i, c) in enumerate(weights)
itx = (i-1)%y_len + 1
ity = floor(Int64,i/x_len) + 1
@series begin
seriestype := :surface
x := temp_x[:,itx]
y := temp_y[:,ity]
z := c == 0 ? Surface(permutedims(NaN .* z_help)) : Surface(permutedims(c .* z_help))
()
end
end
end end
Plots.@deps bins3d surface wireframe Plots.@deps bins3d surface #wireframe mesh3d
@recipe function f(::Type{Val{:histogram3d}}, x, y, z) @recipe function f(::Type{Val{:histogram3d}}, x, y, z)
@ -1049,10 +1093,10 @@ Plots.@deps bins3d surface wireframe
x := h.edges[1] x := h.edges[1]
y := h.edges[2] y := h.edges[2]
z := Surface(h.weights) z := Surface(h.weights)
seriestype := :bins3d seriestype := :bricks3d#:bins3d
() ()
end end
@deps histogram3d bins3d @deps histogram3d bins3d bricks3d
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------