[Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Christophe Pettus
I'm running into something odd in Matplotlib 1.1.  In drawing a horizontal bar 
chart (barh), if the x-axis scale is set to log, the rectangles are not drawn 
and filled; I just get small ticks at the right-hand position where the 
rectangle should end.  Interestingly, if I add a second, stacked barh to the 
same axes, that second set of rectangles draws fine, even though the first does 
not.

If I simply comment out the call setting the x axis to log, it works properly.

Any thoughts?
--
-- Christophe Pettus
   x...@thebuild.com


--
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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Benjamin Root
On Thu, Jan 12, 2012 at 9:03 AM, Christophe Pettus x...@thebuild.com wrote:

 I'm running into something odd in Matplotlib 1.1.  In drawing a horizontal
 bar chart (barh), if the x-axis scale is set to log, the rectangles are not
 drawn and filled; I just get small ticks at the right-hand position where
 the rectangle should end.  Interestingly, if I add a second, stacked barh
 to the same axes, that second set of rectangles draws fine, even though the
 first does not.

 If I simply comment out the call setting the x axis to log, it works
 properly.

 Any thoughts?


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.

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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Christophe Pettus

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()*1) for r in ind ]
data2 = [ float(random.random()*1) 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
   x...@thebuild.com


--
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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Tony Yu
On Thu, Jan 12, 2012 at 11:39 AM, Christophe Pettus x...@thebuild.comwrote:


 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()*1) for r in ind ]
 data2 = [ float(random.random()*1) 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
--
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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Benjamin Root
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.comwrote:


 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()*1) for r in ind ]
 data2 = [ float(random.random()*1) 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
--
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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Tony Yu
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.comwrote:


 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()*1) for r in ind ]
 data2 = [ float(random.random()*1) 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
--
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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread G Jones
I think this is because the bar is going from zero to your value, so the
left edge of the rectangle becomes log(0). I see this when using the 'k'
and 'l' keys to interactively put a histogram on a log scale. Passing in
log=True for hist fixes this. I'm sure there's something similar that can
be done for bar/barh.
G

On Thu, Jan 12, 2012 at 7:03 AM, Christophe Pettus x...@thebuild.com wrote:

 I'm running into something odd in Matplotlib 1.1.  In drawing a horizontal
 bar chart (barh), if the x-axis scale is set to log, the rectangles are not
 drawn and filled; I just get small ticks at the right-hand position where
 the rectangle should end.  Interestingly, if I add a second, stacked barh
 to the same axes, that second set of rectangles draws fine, even though the
 first does not.

 If I simply comment out the call setting the x axis to log, it works
 properly.

 Any thoughts?
 --
 -- Christophe Pettus
   x...@thebuild.com



 --
 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

--
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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Benjamin Root
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.comwrote:


 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()*1) for r in ind ]
 data2 = [ float(random.random()*1) 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


Re: [Matplotlib-users] Horizontal bar chart with log x-axis, no filled boxes

2012-01-12 Thread Christophe Pettus

On Jan 12, 2012, at 9:31 AM, Benjamin Root wrote:

 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?

Moving the call to set_xscale('log') to before the calls to barh fixes the 
problem nicely... thank you!

--
-- Christophe Pettus
   x...@thebuild.com


--
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