Hi

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

On Fri, Feb 3, 2012 at 9:15 AM, Pål Gunnar Ellingsen wrote:
Hi

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