I'm not sure if this is going to work to solve an issue I'm having, but I'd
like to try it before asking a much more complex question. I have a
function, loose_autoscale_view(), that is based on the autoscale_view
function in mpl but allows margin arguments to push the margins out a bit
more.
I'd like to try to alter it to allow certain lines belonging to an axis to
not be taken into consideration when autoscaling. I can alter it to accept
a list of lines to be excluded, but then I don't know how to exclude them
when calculating the autoscaling. I think the key line in the function is
this one:
bb = mtransforms.BboxBase.union(dl)
because that union gets the sub-BBoxes for all the lines...so is there a way
to exclude some? Or is there a better approach?
Thanks. The function is below.
-Che
def loose_autoscale_view(self, subplot, xmargin, ymargin, tight=False,
scalex=True, scaley=True):
"""
autoscale the view limits using the data limits. You can
selectively autoscale only a single axis, eg, the xaxis by
setting *scaley* to *False*. The autoscaling preserves any
axis direction reversal that has already been done.
I have added a way to make it not quite so tight using xmargin and
ymargin.
"""
# if image data only just use the datalim
#if not self.subplot._autoscaleon: return
if scalex:
xshared = subplot._shared_x_axes.get_siblings(subplot)
dl = [ax.dataLim for ax in xshared]
bb = mtransforms.BboxBase.union(dl)
xdiff = bb.intervalx[1] - bb.intervalx[0]
x0 = bb.intervalx[0]-xdiff * xmargin
x1 = bb.intervalx[1]+xdiff * xmargin
if scaley:
yshared = subplot._shared_y_axes.get_siblings(subplot)
dl = [ax.dataLim for ax in yshared]
bb = mtransforms.BboxBase.union(dl)
y0_untampered = bb.intervaly[0]-(bb.intervaly[1])
y0 = bb.intervaly[0]-(bb.intervaly[1]* ymargin)
y1_untampered = bb.intervaly[1]
y1 = bb.intervaly[1]* (1+ymargin)
if (tight or (len(subplot.images)>0 and
len(subplot.lines)==0 and
len(subplot.patches)==0)):
if scalex:
subplot.set_xbound(x0, x1)
if scaley:
subplot.set_ybound(y0, y1)
return
if scalex:
XL = subplot.xaxis.get_major_locator().view_limits(x0, x1)
subplot.set_xbound(XL)
if scaley:
YL = subplot.yaxis.get_major_locator().view_limits(y0, y1)
subplot.set_ybound(YL)
------------------------------------------------------------------------------
Enable your software for Intel(R) Active Management Technology to meet the
growing manageability and security demands of your customers. Businesses
are taking advantage of Intel(R) vPro (TM) technology - will your software
be a part of the solution? Download the Intel(R) Manageability Checker
today! http://p.sf.net/sfu/intel-dev2devmar
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users