Создайте треугольную маску для контурного графика с учетом трех вершин - PullRequest
3 голосов
/ 10 мая 2019

Вот некоторые случайные данные, которые я генерирую:

import scipy.signal as sgn
import scipy.interpolate as intr
import numpy.ma as ma
x = np.linspace(-100,0,500)
y = sgn.sawtooth(2 * np.pi * .2 * x)

y = (sgn.sawtooth(2 * np.pi * .2 * x)+1)/2
y = (y+1)*25
plt.plot(x,y)
z = np.sin(2*np.pi*.1*x)+np.sin(2*np.pi*.1*y)

Это дает мне эту цифру: enter image description here

Затем строю контурный график:

xi,yi = np.meshgrid(np.linspace(x.min(),x.max(),200),np.linspace(y.min(),y.max(),200))   
zi = intr.griddata((x,y), z, (xi, yi) , method='cubic')    
plt.contourf( xi,yi,zi,100); plt.colorbar()

enter image description here s

Для квадратной маски я делаю это:

xi,yi = np.meshgrid(np.linspace(x.min(),x.max(),200),np.linspace(y.min(),y.max(),200))
mask =(yi> 25) & (yi< 35) & (xi > -55) & (xi < -25) 
zi = intr.griddata((x,y), z, (xi, yi) , method='cubic')
zi = ma.masked_array(zi, mask = mask )
plt.contourf( xi,yi,zi,100); plt.colorbar() 

enter image description here

У меня вопрос, как мне поместить треугольную маску в то же базовое положение, что и у квадрата, с учетом трех координат треугольника, т. Е. (-50, 0), (-25,0), (-37 25).

1 Ответ

0 голосов
/ 13 мая 2019

Попробуйте что-нибудь вроде этого:

mask =(yi> 25) & (yi< 35) & (xi > -55) & (xi < -25) & ((xi+95) > 2*yi)

другими словами добавьте ((xi+95) > 2*yi) к вашей маске. Возможно, вам придется настроить некоторые из констант, чтобы получить именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...