Реализация распределения с помощью numpy

Хочу реализовать результат как на рисунке 1 в python с помощью numpy. Пример Круговая маска или срез получилсяПрограмма в python, однако когда я добавляю np.random.normal в этот срез, получается ерунда.

from matplotlib.colors import LinearSegmentedColormap

import matplotlib.pyplot as plt
import numpy as np

def makeData():
    x = np.linspace(3, 2.5, 100) # координаты и количество точек
    y = np.linspace(3, 2.5, 100)
    xgrid, ygrid = np.meshgrid(x, y)
##    print("Двумерную матрица", xgrid, ygrid)

    z = np.random.normal(xgrid, ygrid)  
##    print("Значения функции", z)
    
    return xgrid, ygrid, z

def makeData2():
    a = np.linspace(3, 2.5, 100)                          
    b = np.linspace(3, 2.5, 100)   
    r=.1 # радиус маски                                                                                                        
    x0,y0=2.7,2.8 # центр маски                                                                                               
    X,Y=np.meshgrid(a,b)                                                                                         
    mask=(X-x0)**2+(Y-y0)**2 <r**2
    return X,Y,mask

if __name__ == '__main__':
    x, y, z = makeData()
    a,b,mask=makeData2()

    
    fig = plt.figure(figsize=(10, 10))
    axes = plt.axes(projection="3d")

    cmap = LinearSegmentedColormap.from_list('red_blue', ['b', 'y', 'r'], 256)
    axes.plot_surface(x, y, z, color='#11aa55', cmap=cmap)

    axes.plot_surface(a,b,mask, color='#11aa55', cmap=cmap)
    plt.show()

Ответы (1 шт):

Автор решения: CrazyElf

Так у маски значения от 0 до 1, а у основного рисунка где-то от -5 до +5, поэтому когда вы её рисуете на фоне основного рисунка её просто не видно. Можно сделать, например, так:

axes.plot_surface(x, y, z * (1 + mask * 0.75), color='#11aa55', cmap=cmap)

введите сюда описание изображения

→ Ссылка