On Thu, Jan 12, 2012 at 11:20 AM, Tony Yu <tsy...@gmail.com> wrote:

>
>
> On Thu, Jan 12, 2012 at 12:14 PM, Benjamin Root <ben.r...@ou.edu> wrote:
>
>>
>>
>> On Thu, Jan 12, 2012 at 11:04 AM, Tony Yu <tsy...@gmail.com> wrote:
>>
>>>
>>>
>>> On Thu, Jan 12, 2012 at 11:39 AM, Christophe Pettus 
>>> <x...@thebuild.com>wrote:
>>>
>>>>
>>>> On Jan 12, 2012, at 7:38 AM, Benjamin Root wrote:
>>>> > Does everything work correctly if it is vertical?  In other words,
>>>> use bar() and set the y-axis to log scale? An example script would be
>>>> useful.
>>>>
>>>> No, it doesn't appear to work as a vertical bar chart, either.
>>>>
>>>> I've attached a test case below.  The results I get running it with the
>>>> X-axis as log are:
>>>>
>>>>        http://thebuild.com/matlabtest/matlabtest-log.pdf
>>>>
>>>> Commenting out the call to ax.set_xscale('log') gives me:
>>>>
>>>>        http://thebuild.com/matlabtest/matlabtest.pdf
>>>>
>>>> Thanks!
>>>>
>>>> --
>>>>
>>>> import numpy as np
>>>> import matplotlib
>>>> from matplotlib.font_manager import FontProperties
>>>>
>>>> import random
>>>>
>>>> matplotlib.use('PDF')
>>>>
>>>> import matplotlib.pyplot as plot
>>>>
>>>> small_font = FontProperties()
>>>> small_font.set_size('xx-small')
>>>>
>>>> ind = np.arange(20)
>>>>
>>>> label = [ str(r) for r in ind ]
>>>> data1 = [ float(random.random()*100000000) for r in ind ]
>>>> data2 = [ float(random.random()*100000000) for r in ind ]
>>>>
>>>> width = 0.25
>>>>
>>>> fig = plot.figure()
>>>> ax = fig.add_subplot(111)
>>>>
>>>> ax.set_title('Table Title')
>>>> ax.set_xlabel('X Label')
>>>>
>>>> ax.barh(ind, data1, width, linewidth=0, color='blue')
>>>> ax.barh(ind, data2, width, left=data1, linewidth=0, color='yellow')
>>>> ax.set_yticks(ind + width/2)
>>>> ax.set_yticklabels(label, fontproperties=small_font)
>>>> ax.set_xscale('log')
>>>>
>>>> plot.savefig('matlabtest-log.pdf')
>>>>
>>>> --
>>>> -- Christophe Pettus
>>>>
>>>
>>> Isn't this just because zero isn't defined in log scale? The second set
>>> of data plots fine because it doesn't start at zero, but it isn't obvious
>>> what to do with the first set of data. If you just want to make this work,
>>> you can set the left parameter of the first `barh` call to some constant;
>>> for example:
>>>
>>> >>> origin = 10**np.floor(np.log10(np.min(data1)))
>>> >>> ax.barh(ind, data1, width, left=origin, linewidth=0, color='blue')
>>>
>>> -Tony
>>>
>>
>> Right, but I could have sworn that we got this fixed at some point.
>> There is logic in the bar() function to detect logscale and handle it
>> appropriately.  But I don't know what is not working here.
>>
>> Ben Root
>>
>>
> Ahh, I didn't know this. It looks like setting `log=True` in `barh` works.
>
> -Tony
>
>
D'oh!  Of course, I missed that tiny little detail.  Hmm, so the
auto-detection would have been useless in this case because the scale of
the axes was set after the fact.

Maybe the "log" kwarg should be in a more prominent location in the
docstring?

Ben Root
------------------------------------------------------------------------------
RSA(R) Conference 2012
Mar 27 - Feb 2
Save $400 by Jan. 27
Register now!
http://p.sf.net/sfu/rsa-sfdev2dev2
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to