bdaiinstitute / spatialmath-python

Create, manipulate and convert representations of position and orientation in 2D or 3D using Python
MIT License
497 stars 82 forks source link

Cannot set axis ranges, axes for animate? #126

Open johann-petrak opened 2 months ago

johann-petrak commented 2 months ago

I tried the .animate method and noticed that the dims=[from,to] parameter does not have any influence on the axis ranges. I also tried to pass a pre-configured axis (with the axis ranges set manually via the matplotlib api) to the method using ax=myaxes, but this complains about ax getting passed twice in some nested function.

I trying this using the "%matplotlib widget" pragma, since I am using jupyter lab / notebook 7 or newer.

BTW I found that passing an axis to the .plot() method is the only way to avoid getting two figures in stead of one in that context. When I run

T1 = spatialmath.SE3.Trans(1,2,3)
fig=plt.figure() 
T1.plot()
plt.show()

I get two figures.

Running

fig=plt.figure() 
T1 = spatialmath.SE3.Trans(1,2,3)
ax = fig.add_subplot(111, projection='3d')
T1.plot(ax=ax)
plt.show()

shows correctly just one figure.

This allows me to set the axis ranges in a plot:

fig=plt.figure() 
T1 = spatialmath.SE3.Trans(1,2,3)
T1.plot(dims=[-3,5])
plt.show()

But the axis ranges are not set with animate (instead the default range 0,1 is shown):

T1 = spatialmath.SE3.Trans(1,2,3)
fig=plt.figure()
T1.animate(dims=[-3,3])
plt.show()

and it is also not possible to pass ax=ax to animate.

Package versions: spatialmath 1.1.10 matplotlib 3.9.0 IPython 8.26.0 notebook 7.2.1 jupyter 1.0.0 jupyterlab 4.2.3 ipywidgets 8.1.3

jcao-bdai commented 1 month ago

Hi @johann-petrak , thank you for providing a detailed report

we've implemented an initial fix, in pull-request #131

please note that

please feel free to give it a try if you are interested.

we will merge and cut a new release after we do more testing.

jcao-bdai commented 1 month ago

PR merged.