Well, it did help at least to understand a bit more, although I still
fail to do it.

The code in the file axes3d.py says that keyword arguments passed to
scatter3D are passed on to matplotlib.scatter, so I would expect the
following two figures to work similarly in terms of color:

import matplotlib as mpl
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

f1=mpl.figure()
mpl.scatter(X,Z,c=np.abs(Z/3.0)) # My Z is in [-3.0, 3.0]

f2=mpl.figure()
ax=Axes3D(f2)
ax.scatter3D(X,Y,Z,c=abs(Z/3.0))

mpl.show()

It happens that f1 shows what I expect, a scatter in 2D with the
colors of markers mapped to a colormap (I believe its jet).
For f2, the markers appear as white filled circles.

I am using python 2.6.6 in Debian squeeze (amd64) with
python-matplotlib version 0.99.3-1

Thanks for any help or comment.

On Thu, Oct 14, 2010 at 1:59 AM, Benjamin Root <ben.r...@ou.edu> wrote:
> On Wed, Oct 13, 2010 at 5:46 PM, Pedro M. Ferreira <pmffferre...@gmail.com>
> wrote:
>>
>> Hi All,
>>
>> I have been trying to make a 3D scatter plot using mplot3d and I would
>> like the markers to have their colour according to the Z value.
>> >From what I understood in the tutorial and API I have to use the cmap
>> and norm kwargs, but all my attempts failed.
>>
>> I am trying to do it like this:
>> ax.scatter(x,y,z,s=10,marker='o',c=????,cmap=????,norm=????)
>>
>> However I am not sure what to pass to c, cmap and norm.
>>
>> Any help ?
>> Thanks.
>>
>> Cheers,
>> Pedro
>>
>
> It has been a while since I played around with this, and I am working
> completely off my memory right now, but here goes...
>
> If I remember correctly, the 'c' values can be an array that is parallel to
> the x, y, z arrays and specifies the color in one of two ways.  First, the
> array could have a list of color specs (e.g., 'k', 'r', 'b').  Second, the
> array could contain values that would be passed to the colormap to retrieve
> the colorspec according to where the value lies on the scale of 0 to 1.
>
> If you want to use just simple colors, go ahead and just make a list of
> characters like so:
>
> ['k', 'r', 'g', 'g', 'b', 'k']
>
> based on whatever the values are in z (I recommend using numpy's where()
> function for this.
>
> I am not 100% sure if you need the following or if mpl will just autoscale
> for you.  So you might want to first just try out using the 'c' keyword.
>
> If you want to use the colormap, then the values passed into c either has to
> be the normalized values of z
>
> c = (z - z.min()) / (z.max()-z.min())
>
> or you can use one of the Normalize classes in matplotlib.color (assuming
> you have imported matplotlib.pyplot as plt):
>
> norm = plt.Normalize(z.min(), z.max())
>
> or whatever minimum and/or maximum values you wish.
>
> I believe you can use the default colormap by not specifying anything at all
> for cmap, but I could be wrong here.  You can also specify any colormap by
> their name like 'spring', 'jet', 'bone' and so on.
>
> I hope that helps.
> Ben Root
>
>

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to