Yes you've understood my problem correctly.

Let me know if there is anything I can do to help solve this issue.

Regards

Pål

On 3 February 2012 17:07, Benjamin Root <ben.root@ou.edu> wrote:

On Fri, Feb 3, 2012 at 9:15 AM, Pål Gunnar Ellingsen <paalge@gmail.com> wrote:

HiThank you for trying to help me, though I can't see how aspect is going

to help me. As I understand of the documentation, it would require me to know the

relationship between x and y, which I don't.

I can calculate it, but since it varies between each change in xlimits

and different plot, it would be the same as calculating the ylimits.

As for pyplot.xlim(xmin,xmax) (suggested by Ethan Swint), it does the same as ax.set_xlim() for me.

Below is a sample code that will illustrate the problem.

Regards

Pål

####### Start code ############

#!/usr/bin/env python

import matplotlib

matplotlib.use('Qt4Agg') # generate postscript output by default

import matplotlib.pyplot as plt

import numpy as np

# Creating a function to plot

x = np.linspace(-10, 10, 200)

p = np.poly1d([2, 3, 1, 4])

y = p(x) * np.sin(x)

# plotting the full figure

fig = plt.figure()

ax = fig.add_subplot(111)

ax.plot(x, y)

ax.autoscale(tight=True)

plt.title('Full graph. (Press key for next plot)')

plt.draw()

plt.waitforbuttonpress()

# This is how I'm currently doing it

# x limits

xmin = 2

xmax = 6

# Calculating y limits

ymin = y[np.logical_and(xmin < x, x < xmax)].min()

ymax = y[np.logical_and(xmin < x, x < xmax)].max()

# Inserting some room

room = np.maximum(np.abs(ymin * 0.05), np.abs(ymax * 0.05))

ymin = ymin + room * np.sign(ymin)

ymax = ymax + room * np.sign(ymax)

# Setting the limits

ax.set_xlim([xmin, xmax])

ax.set_ylim([ymin, ymax])

plt.title('What I want (Press key for next plot)')

plt.draw()

plt.waitforbuttonpress()

# This is what pyplot does by default if I only set the limits

ax.autoscale(tight=True)

ax.set_xlim([2, 6])

plt.title('What I get if I only use set_xlim (Press key for exit)')

plt.draw()

plt.waitforbuttonpress()

plt.close()

####### End code ############

Ok, I see what you want. You want the y-limits to automatically change to fit only the data that is displayed for the x-domain you have chosen.

I have tried some tricks, and I am not sure that it is currently possible. There might even be some sort of bug at play here because the function ax.update_datalim() does not appear to update the internal data used for autoscaling. We might have to look into this further.

Ben Root