Реализация распределения с помощью numpy
Хочу реализовать результат как на рисунке 1 в python с помощью numpy.
Круговая маска или срез получился
, однако когда я добавляю 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)
