|
From: Eric F. <ef...@ha...> - 2009-03-22 00:10:01
|
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 <ef...@ha...> 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
>>>>> Mat...@li...
>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>>>
>>
>
> ------------------------------------------------------------------------
>
|