I have a scatter plot graph with a bunch of random x, y coordinates. Currently the Y-Axis starts at 0 and goes up to the max value. I would like the Y-Axis to start at the max value and go up to 0.
points = [(10,5), (5,11), (24,13), (7,8)] x_arr =  y_arr =  for x,y in points: x_arr.append(x) y_arr.append(y) plt.scatter(x_arr,y_arr)
There is a new API that makes this even simpler.
DisplacedAussie‘s answer is correct, but usually a shorter method is just to reverse the single axis in question:
plt.scatter(x_arr, y_arr) ax = plt.gca() ax.set_ylim(ax.get_ylim()[::-1])
gca() function returns the current Axes instance and the
[::-1] reverses the list.
axis([xmin, xmax, ymin, ymax])
So you could add something like this at the end:
plt.axis([min(x_arr), max(x_arr), max(y_arr), 0])
Although you might want padding at each end so that the extreme points don’t sit on the border.
If you’re in ipython in
pylab mode, then
show() is required to make it update the current figure.
Another similar method to those described above is to use
plt.ylim for example:
This method works for me when I’m attempting to compound multiple datasets on Y1 and/or Y2
Alternatively, you can use the matplotlib.pyplot.axis() function, which allows you inverting any of the plot axis
ax = matplotlib.pyplot.axis() matplotlib.pyplot.axis((ax,ax,ax,ax))
Or if you prefer to only reverse the X-axis, then
Indeed, you can invert both axis:
using ylim() might be the best approach for your purpose:
xValues = list(range(10)) quads = [x** 2 for x in xValues] plt.ylim(max(quads), 0) plt.plot(xValues, quads)