## matplotlib-users

 [Matplotlib-users] 3D semilog plot From: Trevor Irons - 2009-12-08 16:12:09 Attachments: Message as HTML ```Hi: I'm trying to get a semilog 3D plot. I want to plot several 2D time series lines, with the third axis being on a log scale. I am trying to set an axis to log using ax.set_yscale('log'), but am getting errors. Is this possible? I keep getting numpy errors when I try: raise MaskError, 'Cannot convert masked element to a Python int.' numpy.ma.core.MaskError: Cannot convert masked element to a Python int. My attempt: from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() #ax = fig.gca() ax = Axes3D(fig) colors = ('r', 'g', 'b', 'k') zd = (0., 1., 2., 3.) T2 = (0.9, .8, .7, .6) ic = 1 for ic in xrange(len(colors)): x = np.arange(0.05,1,.005) z = np.exp(-x/T2[ic]) + np.random.normal(0, .05, len(x)) y = np.exp(zd[ic])*np.ones(len(x)) ax.plot(x,y,z) # Error if uncommented #ax.set_yscale('log') plt.show() Thanks for any insight. ```
 Re: [Matplotlib-users] 3D semilog plot From: Reinier Heeres - 2009-12-13 23:23:07 ```Hi, You'll have to use ax.w_yaxis.set_yscale('log'), which should work fine. Hope this helps, Reinier On Tue, Dec 8, 2009 at 5:11 PM, Trevor Irons wrote: > Hi: > > I'm trying to get a semilog 3D plot. I want to plot several 2D time series > lines, with the third axis being on a log scale. I am trying to set an axis > to log using ax.set_yscale('log'), but am getting errors. Is this possible? > > I keep getting numpy errors when I try: > raise MaskError, 'Cannot convert masked element to a Python int.' > numpy.ma.core.MaskError: Cannot convert masked element to a Python int. > > My attempt: > > from mpl_toolkits.mplot3d import Axes3D > import matplotlib.pyplot as plt > import numpy as np > > fig = plt.figure() > #ax = fig.gca() > ax = Axes3D(fig) > > colors = ('r', 'g', 'b', 'k') > zd = (0., 1., 2., 3.) > T2 = (0.9, .8, .7, .6) > ic = 1 > > for ic in xrange(len(colors)): >     x = np.arange(0.05,1,.005) >     z = np.exp(-x/T2[ic]) + np.random.normal(0, .05, len(x)) >     y = np.exp(zd[ic])*np.ones(len(x)) >     ax.plot(x,y,z) > > # Error if uncommented > #ax.set_yscale('log') > plt.show() > > Thanks for any insight. -- Reinier Heeres Tel: +31 6 10852639 ```
 Re: [Matplotlib-users] 3D semilog plot From: Trevor Irons - 2009-12-14 15:35:15 Attachments: Message as HTML ```Thanks, This almost does what I want. The labels are now changed to log notation, but the tick locations have remained the same. I want the spacing between each logarithmic decade to be equal. I just did an svn up and rebuild so I am working with bleeding edge matplotlib. Do I need to manually set the locations of the ticks? I'll play around a bit more with w_yaxis, I wasn't aware of this. Danke vel, Trevor 2009/12/13 Reinier Heeres > Hi, > > You'll have to use ax.w_yaxis.set_yscale('log'), which should work fine. > > Hope this helps, > Reinier > > On Tue, Dec 8, 2009 at 5:11 PM, Trevor Irons > wrote: > > Hi: > > > > I'm trying to get a semilog 3D plot. I want to plot several 2D time > series > > lines, with the third axis being on a log scale. I am trying to set an > axis > > to log using ax.set_yscale('log'), but am getting errors. Is this > possible? > > > > I keep getting numpy errors when I try: > > raise MaskError, 'Cannot convert masked element to a Python int.' > > numpy.ma.core.MaskError: Cannot convert masked element to a Python int. > > > > My attempt: > > > > from mpl_toolkits.mplot3d import Axes3D > > import matplotlib.pyplot as plt > > import numpy as np > > > > fig = plt.figure() > > #ax = fig.gca() > > ax = Axes3D(fig) > > > > colors = ('r', 'g', 'b', 'k') > > zd = (0., 1., 2., 3.) > > T2 = (0.9, .8, .7, .6) > > ic = 1 > > > > for ic in xrange(len(colors)): > > x = np.arange(0.05,1,.005) > > z = np.exp(-x/T2[ic]) + np.random.normal(0, .05, len(x)) > > y = np.exp(zd[ic])*np.ones(len(x)) > > ax.plot(x,y,z) > > > > # Error if uncommented > > #ax.set_yscale('log') > > plt.show() > > > > Thanks for any insight. > > -- > Reinier Heeres > Tel: +31 6 10852639 > ```