Matplotlib:当我使用X,Y时,contourf rescales和axis错误

时间:2015-06-11 06:28:23

标签: python matplotlib plot contourf

根据要求提供完整的测试代码:

import numpy as np
import matplotlib.pyplot as plt

# Numtopad determines number of padding points
numtopad  = 512

# Define axis
x = np.arange(numtopad)
y = x[:,np.newaxis]

# Offsets which are zero
x0 = 256*0
y0 = 256*0

# Exponentially decaying function in 2D
f = np.exp( -((y-y0) + (x-x0))/(10))

# Fourier transform above function and move zero frqeuencies to center of graph
f2 = np.fft.fft(f,axis=0)
f2 = np.fft.fft(f2,axis=1)
f2 = np.fft.fftshift(f2,axes=0)
f2 = np.fft.fftshift(f2,axes=1)

Delta_t = x[1]-x[0]

# Define a frequency
freq_t = np.fft.fftfreq(numtopad,d = Delta_t)
freq_offset = 200

E1 = freq_t + freq_offset
E2 = freq_t + freq_offset

# plt.contourf(abs(f2))
plt.contourf(E1,E2,abs(f2))

1 个答案:

答案 0 :(得分:0)

你能否提供完整的代码,因为图片不可用,只是为了确保我达到目的?

如果我正确地理解了你的问题,你的数组E1和E2都以0为中心:[ - 0.5,...,0.5],而函数f是以256为中心的高斯。你应该将函数f改为正确相对于阵列E1和E2放置或规范化数组X,Y:

import numpy as np
import matplotlib.pyplot as plt

numtopad = 512
x = np.arange(numtopad)
y = x[:,np.newaxis]

x0 = 256
y0 = 256
f = exp( -((y-y0)**2 + (x-x0)**2)/9000)

X,Y = numpy.meshgrid(x,y)
X = ((X)/512.)-0.5
Y = ((Y)/512.)-0.5

fig = plt.figure()
axe = fig.add_subplot(111)
axe.contourf(X, Y, abs(f))
fig.show()

如果您只想重新调整数据,可以使用此代码,甚至可以使用此代码生成x和y(但您必须更改f):

x = numpy.linspace(-0.5,0.5,512) #512p linearly spaced [-0.5,0.5]
X,Y = numpy.meshgrid(x,x) #2-D meshgrid on the box [-0.5,0.5]
f = exp( -((X)**2 + (Y)**2))
axe.contourf(X, Y, f)