matplotlib.pyplot imshow()现在显示纯蓝色,不再显示颜色?

时间:2017-02-09 18:09:52

标签: python-3.x matplotlib

继续我之前的帮助,在这里提出问题 How to centre the origin in the centre of an imshow() plot 在对一些参数进行了一些调整之后,Spyder现在始终显示空白的蓝色输出。令人费解! 我强迫dtype是uint8(我在相关问题上读到这可能是原因),但无济于事。

编辑:(感谢快速反应)这里是相关代码(来自更大的方程,用于通过方形光圈进行衍射建模):

import numpy as np
import matplotlib.pyplot as plt

def expo(x,y,z,xp,yp,k):
    """
    Function of the integrand in Eq. 5
    """
    return np.exp((1j*k/(2*z))*(((x-xp)**2) + ((y-yp)**2))) 

def square_2dsimpson_eval(a,b,n):
    simp_eval = np.zeros((n+1,n+1))
    deltap = (b-a)/n
    xp = 0
    yp = 0
    w = np.zeros((n+1,n+1))
    x=0
    y=0
    for h in range(n+1):    #the first two for loops produce the 2d Simpson matrix of coeffecients
        if h == 0 or h==n:
            w[0,h] = 1

        elif h%2 != 0:
            w[0,h]=4

        elif h%2 == 0:
            w[0,h]=2

    for g in range(n+1):
        if g ==0 or g==n:
            w[g,0]=1

        elif g%2 != 0:
            w[g,0]=4             

        elif g%2 == 0:
            w[g,0]=2

    for h in range(1,n+1):
        for g in range(1,n+1):
            w[h,g]=w[0,h]*w[g,0]

    for h in range(0,n+1):
        xp = h*deltap
        for g in range(0,n+1):
            yp = g*deltap
            simp_eval[h,g] = expo(x,y,z,xp,yp,k) #the integrand

    return (k/(2*np.pi*z))*((deltap**2)/9)*(np.sum(simp_eval*w))

n = 3.3

        #this loop checks that user's N is even as required for Simpson's rule
        while n % 2 != 0:
            n = int(input("Type an even N value: "))
            if n % 2 == 0:
                break
            else:
                print("n must be even you noob!")
        lam=float(input("Type light wavelength in mm: "))
        k=(2*np.pi)/lam
        z=float(input("Type screen distance, z in mm: "))
        rho=float(input("Type rho in mm: "))

        delta = 2/n
        intensity = np.zeros((n+1,n+1),dtype='uint8')
        for i in range(n+1):
            x=-1+(i*delta)
            for j in range(n+1):
                y =-1+(j*delta)
                intensity[i,j] = (abs(square_2dsimpson_eval(-rho/2,rho/2,n)))**2  
        print(intensity.dtype)
        plt.imshow(intensity)
        plt.show()

情节已经过去了: enter image description here

到此:

enter image description here

提前致谢。

1 个答案:

答案 0 :(得分:1)

没有 甚至知道生成任一图像的代码,我只能说第二个图像似乎是某个区域中第一个图像的剪切区域没有数据或数据接近或等于最小值。

enter image description here