On Mon, Feb 7, 2011 at 5:02 AM, Paul Leopardi <paul.leopa...@iinet.net.au>wrote:

> Hi all,
> On Sun, 6 Feb 2011 03:54:48 PM Paul Leopardi wrote:
> > I'm having trouble using multiple figures with mplot3d.
>
> I have appended an entire example script, below.
>
> The script incrementally plots 3 curves, one in each of 3 figure windows.
> The
> trouble is, once Figure 2 has finished plotting, the curve for Figure 1
> disappears and is replaced by the curve for Figure 2, with the axes for
> Figure
> 1; once Figure 3 has finished plotting, the curves for Figures 1 and 2
> disappear and are replaced by the curve for Figure 3, with the axes for
> Figure
> 1 and Figure 2, respectively.
>
> The original code was written with incremental plotting because the points
> took a long time to calculate. Without incremental plotting, the figures
> stayed blank for a long time. The script below is very similar to my
> original
> script, but does not depend on my GluCat library.
>
> Best, Paul
> ---
>
> # -*- coding: utf-8 -*-
>
> # Imports needed for array calculation and plotting.
> from numpy import array, floor, random, empty, cos, pi
> from mpl_toolkits.mplot3d import Axes3D
> import matplotlib.pyplot as plt
>
> # Constants to control the plotting.
> C=3 # Number of curves to plot.
> P=1000 # Number of points overall.
> R=2 # Scaling constant to use.
> N=25 # Number of points in a curve segment.
> M=P/N
>
> # Array of points.
> x=empty((3,P))
> rgb=empty((3))
>
> # Plot C curves.
> for i in xrange(0,C):
>  # Initial point.
>  x0=random.randn(3)
>
>  # Plot a curve using a random bivector in R_{5,0}
>  # with appropriate scaling.
>  w=random.randn(3) * 2*pi*R/P
>
>  # Use a new figure for each curve.
>  fig=plt.figure(figsize=(15,12))
>  # ax=Axes3D(fig)
>  ax = fig.gca(projection='3d')
>  plt.show()
>
>  # Coordinate limits to determine the colour of the first curve segment.
>  minx=array([-x0[0],x0[1],-x0[2]])
>  maxx=minx.copy()
>
>  # Split the curve into M segments, each with an appropriate colour.
>  for j in range(0,M):
>
>   # Find N points forming a curve segment by
>  # exponentiating w*k for k from j*N to (j+1)*N-1.
>  abot=j*N
>  atop=abot+N
>  for k in xrange(abot,atop):
>   for h in range(0,3):
>    x[h,k]=x0[h]+cos(w[h]*k)
>
>  # Determine the colour of the curve segment.
>   amid=floor((abot+atop)/2)
>  for h in range(0,3):
>   sign=(-1)**(h+1)
>   minx[h]=min(minx[h],min(sign*x[h,abot:atop]))
>   maxx[h]=max(maxx[h],max(sign*x[h,abot:atop]))
>   rgb[h]=max(0.0,min((sign*x[h,amid]-minx[h])/(maxx[h]-minx[h]),1.0))
>
>  # Plot the curve segment using the chosen colour.
>  alow=(abot-1 if j>0 else abot)
>  ax.plot(x[0,alow:atop],x[1,alow:atop],x[2,alow:atop],c=rgb.tolist())
>  plt.draw()
>  plt.show()
>
>
Paul,

As formatted, the code would not run.  I presume that everything after "for
j in range(0,M):" should be indented?  When I did that and ran it in
ipython, I could not reproduce your problem.  What version of matplotlib are
you running?

Ben Root
------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to