On Sunday, March 18, 2012, Tony Yu <tsyu80@gmail.com> wrote:
>
>
> On Sun, Mar 18, 2012 at 9:14 AM, klo uo <klonuo@gmail.com> wrote:
>>
>> On Sun, Mar 18, 2012 at 1:50 PM, Angus McMorland <amcmorl@gmail.com> wrote:
>>>
>>> For inline ipython, you want to switch to the object-oriented use of
>>> pylab. Something like this should work with xlim.
>>>
>>> a = [0.1, 0.2, 0.1]
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.errorbar(arange(3), a, yerr=a-sum(a)/len(a), fmt='ro')
>>> ax.set_xlim(-.5,2.5)
>>> ax.show()
>>>
>>> I'm not aware of automatic settings for padding, but with this
>>> set_xlim, it's easy enough to roll your own using the data limits.
>>>
>>
>> OK, thanks
>>
>> It's not very elegant (assuming pylab freedom) but I take it as only way to correct clipping example (or differently put - to use custom range for axis)
>>
>
> You can roll out a utility function that can automatically adjust the limits with some specified padding (i.e. the function doesn't calculate the marker size, but you can just give it sufficient padding).
> Here's an example where you specify a padding passed on the axes size (0.05 is 5% of axes height/width):
> #~~~~
> import numpy as np
> import matplotlib.pyplot as plt
> def pad_limits(pad_frac=0.05, ax=None):
>     ax = ax if ax is not None else plt.gca()
>     ax.set_xlim(_calc_limits(ax.xaxis, pad_frac))
>     ax.set_ylim(_calc_limits(ax.yaxis, pad_frac))
> def _calc_limits(axis, frac):
>     limits = axis.get_data_interval()
>     mag = np.diff(limits)[0]
>     pad = np.array([-mag*frac, mag*frac])
>     return limits + pad
> a = np.array([0.1, 0.2, 0.1])
> plt.errorbar(np.arange(3), a, yerr=a-sum(a)/len(a), fmt='ro')
> pad_limits()
> plt.show()
> #~~~~
> I've put this is my personal mpl toolkit with the added ability of handling log scales:
> https://github.com/tonysyu/mpltools/blob/master/mpltools/layout.py#L80
> Best,
> -Tony
>

Uhm, don't we already have padx and pady kwargs for various limits functions?  I know scatter and plot respects them.

Ben Root