маскирование части контурного графика в matplotlib

Я пытаюсь создать заполненный контурный график в matplotlib, используя convertf. Данные отсутствуют в неровном узоре в нижней части графика. Контурный график оказывается пустым не только там, где исходные данные замаскированы, но и в местах, где контурный алгоритм не может чисто интерполировать из-за недостаточного соседства хороших данных.

Я знаю, как расширить набор данных, чтобы получить правдоподобные контуры в этих карманах. Однако, если я рисую расширенные данные, я везде получаю заливку контура. Я хотел бы замаскировать области, где исходные данные отсутствовали, черным или белым цветом.

В предыдущей теме я узнал, как сделать это для изображения, нарисовав первое изображение, а затем покрыв его другим изображением, которое маскирует плохие области. Аналогом будет приведенный ниже фрагмент кода, но он не работает для контура ... Я не могу заставить imshow bad_data скрыть расширенный график контура. Является ли это возможным?

Спасибо, Eli

import matplotlib.pyplot as plt
lev = [0.0,0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]           
norml = colors.BoundaryNorm(lev, 256)
# this is the contour plot, using extended_data so that the contours are plausibly extended
cs = plt.contourf(x,z,extended_data,levels = lev, cmap = cm.RdBu_r,norm = norml) 
# now the attempt to cover it up -- but imshow will not cover up the original plot as it will with another image
bad_data = np.ma.masked_where(~data.mask, data.mask, copy=True) 
plt.imshow(bad_data, interpolation='nearest', aspect = 'auto', cmap=cm.gray)
plt.show()
10
задан Eli S 21 March 2012 в 01:38
поделиться