Hello, I have 2d array with fourier amplitudes that I would like to plot. I found two options: contourf and imshow. This is my code:
omega = np.fft.rfftn(b_field, axes=(1, 0)) omega = np.abs(np.fft.fftshift(omega, axes=(1,))) fig = plt.figure() ax = fig.add_subplot(111) M = omega.shape[0] N = omega.shape[1] ax.set_title('Spectrum') ax.set_ylabel(r'Poloidal Mode Number m') ax.set_xlabel(r'Toroidal Mode Number n') ax.grid(True) # Get rid of normalization omega /= np.prod(omega.shape) The problem with contourf is that I can't seem to stop it from strongly interpolating the data, which obscures the discrete nature: (see www.rath.org/contourf.png) ctr = ax.contourf(np.arange(-N / 2, N / 2), np.arange(0, M), omega * 10000, 100, cmap=cm.YlOrRd, interpolation='nearest') fig.colorbar(ctr) ax.set_xlim(xmin= -(N - 1) / 2, xmax=(N - 1) / 2) ax.set_ylim(ymin=0, ymax=M - 1) fig.show() Apparently contourf does not accept the interpolation='nearest' option. Is there a way to make it stop interpolating? The problem with imshow is, that it rescales the data so the colorbar does not show the correct amplitudes (see www.rath.org/imshow.png): ctr = ax.imshow(omega, cmap=cm.YlOrRd, aspect='equal', interpolation='nearest', origin='lower', extent=(-(N-1)/2, (N-1)/2, 0, M-1)) fig.colorbar(ctr) ax.set_xlim(xmin= -(N - 1) / 2, xmax=(N - 1) / 2) ax.set_ylim(ymin=0, ymax=M - 1) fig.show() Is there a way to get the proper amplitudes into the colorbar? Thanks! -Nikolaus -- »Time flies like an arrow, fruit flies like a Banana.« PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users