Merge pull request #1141 from apalugniok/apalugniok-test2
Adds camera attribute for 3D plots.
This commit is contained in:
commit
2f04c5fec8
@ -94,6 +94,7 @@ const _arg_desc = KW(
|
|||||||
:subplot_index => "Integer. Internal (not set by user). Specifies the index of this subplot in the Plot's `plt.subplot` list.",
|
:subplot_index => "Integer. Internal (not set by user). Specifies the index of this subplot in the Plot's `plt.subplot` list.",
|
||||||
:colorbar_title => "String. Title of colorbar.",
|
:colorbar_title => "String. Title of colorbar.",
|
||||||
:framestyle => "Symbol. Style of the axes frame. Choose from $(_allFramestyles)",
|
:framestyle => "Symbol. Style of the axes frame. Choose from $(_allFramestyles)",
|
||||||
|
:camera => "NTuple{2, Real}. Sets the view angle (azimuthal, elevation) for 3D plots",
|
||||||
|
|
||||||
# axis args
|
# axis args
|
||||||
:guide => "String. Axis guide (label).",
|
:guide => "String. Axis guide (label).",
|
||||||
|
|||||||
@ -316,6 +316,7 @@ const _subplot_defaults = KW(
|
|||||||
:subplot_index => -1,
|
:subplot_index => -1,
|
||||||
:colorbar_title => "",
|
:colorbar_title => "",
|
||||||
:framestyle => :axes,
|
:framestyle => :axes,
|
||||||
|
:camera => (30,30),
|
||||||
)
|
)
|
||||||
|
|
||||||
const _axis_defaults = KW(
|
const _axis_defaults = KW(
|
||||||
@ -532,6 +533,7 @@ add_aliases(:gridlinewidth, :gridwidth, :grid_linewidth, :grid_width, :gridlw, :
|
|||||||
add_aliases(:gridstyle, :grid_style, :gridlinestyle, :grid_linestyle, :grid_ls, :gridls)
|
add_aliases(:gridstyle, :grid_style, :gridlinestyle, :grid_linestyle, :grid_ls, :gridls)
|
||||||
add_aliases(:framestyle, :frame_style, :frame, :axesstyle, :axes_style, :boxstyle, :box_style, :box, :borderstyle, :border_style, :border)
|
add_aliases(:framestyle, :frame_style, :frame, :axesstyle, :axes_style, :boxstyle, :box_style, :box, :borderstyle, :border_style, :border)
|
||||||
add_aliases(:tick_direction, :tickdirection, :tick_dir, :tickdir, :tick_orientation, :tickorientation, :tick_or, :tickor)
|
add_aliases(:tick_direction, :tickdirection, :tick_dir, :tickdir, :tick_orientation, :tickorientation, :tick_or, :tickor)
|
||||||
|
add_aliases(:camera, :cam, :viewangle, :view_angle)
|
||||||
|
|
||||||
# add all pluralized forms to the _keyAliases dict
|
# add all pluralized forms to the _keyAliases dict
|
||||||
for arg in keys(_series_defaults)
|
for arg in keys(_series_defaults)
|
||||||
|
|||||||
@ -34,6 +34,7 @@ const _gr_attr = merge_with_base_supported([
|
|||||||
:arrow,
|
:arrow,
|
||||||
:framestyle,
|
:framestyle,
|
||||||
:tick_direction,
|
:tick_direction,
|
||||||
|
:camera,
|
||||||
])
|
])
|
||||||
const _gr_seriestype = [
|
const _gr_seriestype = [
|
||||||
:path, :scatter,
|
:path, :scatter,
|
||||||
@ -741,7 +742,7 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas)
|
|||||||
isfinite(clims[1]) && (zmin = clims[1])
|
isfinite(clims[1]) && (zmin = clims[1])
|
||||||
isfinite(clims[2]) && (zmax = clims[2])
|
isfinite(clims[2]) && (zmax = clims[2])
|
||||||
end
|
end
|
||||||
GR.setspace(zmin, zmax, 35, 60)
|
GR.setspace(zmin, zmax, round.(Int, sp[:camera])...)
|
||||||
xtick = GR.tick(xmin, xmax) / 2
|
xtick = GR.tick(xmin, xmax) / 2
|
||||||
ytick = GR.tick(ymin, ymax) / 2
|
ytick = GR.tick(ymin, ymax) / 2
|
||||||
ztick = GR.tick(zmin, zmax) / 2
|
ztick = GR.tick(zmin, zmax) / 2
|
||||||
|
|||||||
@ -33,6 +33,7 @@ const _pgfplots_attr = merge_with_base_supported([
|
|||||||
# :match_dimensions,
|
# :match_dimensions,
|
||||||
:tick_direction,
|
:tick_direction,
|
||||||
:framestyle,
|
:framestyle,
|
||||||
|
:camera,
|
||||||
])
|
])
|
||||||
const _pgfplots_seriestype = [:path, :path3d, :scatter, :steppre, :stepmid, :steppost, :histogram2d, :ysticks, :xsticks, :contour, :shape]
|
const _pgfplots_seriestype = [:path, :path3d, :scatter, :steppre, :stepmid, :steppost, :histogram2d, :ysticks, :xsticks, :contour, :shape]
|
||||||
const _pgfplots_style = [:auto, :solid, :dash, :dot, :dashdot, :dashdotdot]
|
const _pgfplots_style = [:auto, :solid, :dash, :dot, :dashdot, :dashdotdot]
|
||||||
@ -380,6 +381,11 @@ function _update_plot_object(plt::Plot{PGFPlotsBackend})
|
|||||||
kw[:legendPos] = _pgfplots_legend_pos[legpos]
|
kw[:legendPos] = _pgfplots_legend_pos[legpos]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if is3d(sp)
|
||||||
|
azim, elev = sp[:camera]
|
||||||
|
kw[:view] = "{$(azim)}{$(elev)}"
|
||||||
|
end
|
||||||
|
|
||||||
axisf = PGFPlots.Axis
|
axisf = PGFPlots.Axis
|
||||||
if sp[:projection] == :polar
|
if sp[:projection] == :polar
|
||||||
axisf = PGFPlots.PolarAxis
|
axisf = PGFPlots.PolarAxis
|
||||||
|
|||||||
@ -35,6 +35,7 @@ const _plotly_attr = merge_with_base_supported([
|
|||||||
:clims,
|
:clims,
|
||||||
:framestyle,
|
:framestyle,
|
||||||
:tick_direction,
|
:tick_direction,
|
||||||
|
:camera,
|
||||||
])
|
])
|
||||||
|
|
||||||
const _plotly_seriestype = [
|
const _plotly_seriestype = [
|
||||||
@ -324,10 +325,21 @@ function plotly_layout(plt::Plot)
|
|||||||
|
|
||||||
# if any(is3d, seriesargs)
|
# if any(is3d, seriesargs)
|
||||||
if is3d(sp)
|
if is3d(sp)
|
||||||
|
azim = sp[:camera][1] - 90 #convert azimuthal to match GR behaviour
|
||||||
|
theta = 90 - sp[:camera][2] #spherical coordinate angle from z axis
|
||||||
d_out[:scene] = KW(
|
d_out[:scene] = KW(
|
||||||
Symbol("xaxis$spidx") => plotly_axis(sp[:xaxis], sp),
|
Symbol("xaxis$spidx") => plotly_axis(sp[:xaxis], sp),
|
||||||
Symbol("yaxis$spidx") => plotly_axis(sp[:yaxis], sp),
|
Symbol("yaxis$spidx") => plotly_axis(sp[:yaxis], sp),
|
||||||
Symbol("zaxis$spidx") => plotly_axis(sp[:zaxis], sp),
|
Symbol("zaxis$spidx") => plotly_axis(sp[:zaxis], sp),
|
||||||
|
|
||||||
|
#2.6 multiplier set camera eye such that whole plot can be seen
|
||||||
|
:camera => KW(
|
||||||
|
:eye => KW(
|
||||||
|
:x => cosd(azim)*sind(theta)*2.6,
|
||||||
|
:y => sind(azim)*sind(theta)*2.6,
|
||||||
|
:z => cosd(theta)*2.6,
|
||||||
|
),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
d_out[Symbol("xaxis$spidx")] = plotly_axis(sp[:xaxis], sp)
|
d_out[Symbol("xaxis$spidx")] = plotly_axis(sp[:xaxis], sp)
|
||||||
|
|||||||
@ -35,6 +35,7 @@ const _pyplot_attr = merge_with_base_supported([
|
|||||||
:stride,
|
:stride,
|
||||||
:framestyle,
|
:framestyle,
|
||||||
:tick_direction,
|
:tick_direction,
|
||||||
|
:camera,
|
||||||
])
|
])
|
||||||
const _pyplot_seriestype = [
|
const _pyplot_seriestype = [
|
||||||
:path, :steppre, :steppost, :shape,
|
:path, :steppre, :steppost, :shape,
|
||||||
@ -1104,6 +1105,13 @@ function _before_layout_calcs(plt::Plot{PyPlotBackend})
|
|||||||
ax[:set_aspect](isa(aratio, Symbol) ? string(aratio) : aratio, anchor = "C")
|
ax[:set_aspect](isa(aratio, Symbol) ? string(aratio) : aratio, anchor = "C")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#camera/view angle
|
||||||
|
if is3d(sp)
|
||||||
|
#convert azimuthal to match GR behaviour
|
||||||
|
#view_init(elevation, azimuthal) so reverse :camera args
|
||||||
|
ax[:view_init]((sp[:camera].-(90,0))[end:-1:1]...)
|
||||||
|
end
|
||||||
|
|
||||||
# legend
|
# legend
|
||||||
py_add_legend(plt, sp, ax)
|
py_add_legend(plt, sp, ax)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user