From: Tony Yu <ts...@gm...> - 2012-01-03 22:07:16
|
On Tue, Jan 3, 2012 at 11:57 AM, Mario Fuest <mar...@ao...> wrote: > Hi, > > Maybe a bad idea to ask a question on x-mas. Well, I hope it’s not that > unpolite to push one‘s questions. :) > > Basically I just want to set a fixed width/height on my figure. That > should be possible? > > Mario Fuest <mar...@ao...> schrieb am Sat, 24. Dec 16:42: > > Hi there, > > > > I want to examine a vector field and therefore i used "quiver" to > > visualize said field: > > > > > import numpy as np > > > import matplotlib.pyplot as plt > > > > > > # points > > > x, y = np.meshgrid(np.arange(0, 2*np.pi, 0.1), > > > np.arange(0, 1*np.pi, 0.1)) > > > # derivatives > > > dx = -2*np.sin(x)*np.cos(y) > > > dy = np.cos(x)*np.sin(y) > > > > > > # plot > > > plt.figure() > > > plt.quiver(dx, dy, color='b') > > > > > > # beautiful axis > > > a = plt.gca() > > > x_a, y_a = a.get_xaxis(), a.get_yaxis() > > > a.axis('tight') > > > # TODO: We should not multiply with 10 here. > > > x_a.set_ticks(np.arange(0, 2*np.pi*10+1, np.pi*10/4)) > > > y_a.set_ticks(np.arange(0, 1*np.pi*10+1, np.pi*10/4)) > > > labels = [ > > > r'$0$', > > > r'$\frac{1}{4}\pi$', > > > r'$\frac{1}{2}\pi$', > > > r'$\frac{3}{4}\pi$', > > > r'$\pi$', > > > r'$\frac{5}{4}\pi$', > > > r'$\frac{3}{2}\pi$', > > > r'$\frac{7}{4}\pi$', > > > r'$2 \pi$'] > > > a.set_xticklabels(labels) > > > a.set_yticklabels(labels[:5]) > > > > > > # show > > > plt.show() > > > > (The plot looks like a double swirl, if anyone is interested in that > > information) > > > > At first I do not know why I have to multiply with 10 at the ticks, but > > thats not the point. > > > > It is much more important that I would like to set the image to a > > certain width before saving. It should be both "tight" and "equal", so > > after setting the width the height could be calculated automatically. > > > > As a workaround I use the images and strech them vertically, but then > > the x/y axis tick labels look strange. > > > > So: How to set a certain width? > > > > Thanks and a merry Christmas, > > Keba > > You can try >>> ax.set_aspect('equal') >>> ax.autoscale(tight=True) The order doesn't seem to matter. -Tony |