Mike Bauer wrote:
> Eric,
> 
> Here's an example of a working hexbin (attached). What I want to do is 
> compare this with another dataset with many fewer points. What I'd 
> really like is for the color bar to reflect the cumulative percent of 
> the total count each cell holds, but I'd settle for what I thought 
> normalized gives which is scaling the colors from 0 - 1 instead of 
> showing the number count. I don't care about comparing numbers I care 
> about the relative frequency of each cell.

I don't have a solution for you, but it looks to me like you can do the 
sort of thing you are looking for via suitable choice of the C and 
reduce_C_function kwargs to hexbin.  This is not a job for the norm kwarg.

Actually, here is a stab at what I think you are describing:

x = np.random.normal(size=(10000,))
y = np.random.normal(size=(10000,))
imask = (x > -1) & (x < 1) & (y > -1) & (y < 1)
x = x[imask]
y = y[imask]
c = np.ones_like(x) * 100 / len(x)
hexbin(x, y, C=c, reduce_C_function=np.sum, gridsize=20)
colorbar()

I think this is giving percentage of hits in each bin.  The numbers are 
very small because there are many bins.

Eric


> 
> Thanks for the pointer to colors.LogNorm(). I'll look into that.
> 
> Mike
> 
> Here's my script (sorry, you'll see it's a temporary hack).
> 
> 
> 
> 
> 
> On Mar 20, 2009, at 7:10 PM, Eric Firing wrote:
> 
>> Mike Bauer wrote:
>>> Eric,
>>> Thanks for the reply.  I'm trying to show the relative 2d distribuion 
>>> between 2 sets of data. I thought the normalization would ease the 
>>> comparison. Fixing the ' doesn't help.
>>> So are you saying I need an instance of something.normalize rather 
>>> than just passing norm='normalize'?
>>
>> It sounds like you are misunderstanding the norm kwarg; it is for 
>> controlling the mapping of an arbitrary range of numbers to the 0-1 
>> range that is used in color mapping.  The default is a linear mapping; 
>> one can use a log mapping instead ("norm=colors.LogNorm()"), or make 
>> your own mapping function, etc.  The norm kwarg takes an instance of a 
>> Normalize class or subclass.  See colors.py to find out what Normalize 
>> subclasses are available.  But, you may not need to specify one at 
>> all, depending on what it is you are trying to do.
>>
>> I still don't understand what it is that you wanted to "normalize". 
>> What was the undesirable characteristic of the plot you had before you 
>> put in the norm kwarg?
>>
>> Eric
>>
>>> Mike
>>> Sent from my iPhone
>>> On Mar 20, 2009, at 5:15 PM, Eric Firing <efir...@hawaii.edu> wrote:
>>>> Mike Bauer wrote:
>>>>> Hello,
>>>>> Quick note. I'm making plots with hexbin and everything works  
>>>>> correctly until I try to use the norm='Normalize' option at which  
>>>>> point I get:
>>>>> Traceback (most recent call last):
>>>>>  File "diff_engine_v2tmp.py", line 731, in <module>
>>>>>    kept_and_discards)
>>>>>  File "diff_engine_v2tmp.py", line 605, in main
>>>>>    plt.hexbin(xdat,ydat,cmap=cm.jet,gridsize=25,norm=Normalize' )
>>>>
>>>> What is that single quote mark doing after Normalize?  If we ignore 
>>>> it, then it looks like you are passing a class, not a class instance 
>>>> as the kwarg needs.
>>>>
>>>>>  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/ 
>>>>> lib/python2.5/site-packages/matplotlib/pyplot.py", line 1920, in 
>>>>> hexbin
>>>>>    ret =  gca().hexbin(*args, **kwargs)
>>>>>  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/ 
>>>>> lib/python2.5/site-packages/matplotlib/axes.py", line 5452, in hexbin
>>>>>    collection.autoscale_None()
>>>>>  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/ 
>>>>> lib/python2.5/site-packages/matplotlib/cm.py", line 148, in  
>>>>> autoscale_None
>>>>>    self.norm.autoscale_None(self._A)
>>>>> AttributeError: 'int' object has no attribute 'autoscale_None'
>>>>
>>>> This part of the traceback is also a little puzzling; I'm not sure 
>>>> why self.norm is an int at this point.
>>>>
>>>>> I assume this a bug of some sort.
>>>>
>>>> No, I think the problem is that you are passing a class instead of 
>>>> an instance of a class as the norm kwarg to hexbin.  (It is not 
>>>> completely clear to me from the traceback, however--there is that 
>>>> strange single quote mark.) What kind of normalization are you 
>>>> trying to to?  In other words, what are you trying to accomplish by 
>>>> specifying the norm kwarg?
>>>>
>>>> Eric
>>>>
>>>>
>>>>> Thanks for any ideas.
>>>>> Mike
>>>>> Using:
>>>>>   os-x 10.5.6
>>>>>   python 2.5.4 from macports
>>>>>   matplotlib  0.98.5.2 from macports
>>>>> ------------------------------------------------------------------------------
>>>>>  
>>>>>
>>>>> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) 
>>>>> are
>>>>> powering Web 2.0 with engaging, cross-platform capabilities. 
>>>>> Quickly and
>>>>> easily build your RIAs with Flex Builder, the Eclipse(TM)based 
>>>>> development
>>>>> software that enables intelligent coding and step-through debugging.
>>>>> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
>>>>> _______________________________________________
>>>>> Matplotlib-users mailing list
>>>>> Matplotlib-users@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>>>
>>
> 
> ------------------------------------------------------------------------
> 


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to