Штриховать область NaN в контурной зоне в матплотлибе
Я планирую матрицу данных. Некоторые из элементов матрицы являются NaN (соответствуют комбинациям параметров, где не существует решения). Я хотел бы указать эту область в контурной области заштрихованной областью. Есть идеи, как этого добиться?
1 ответ
Решение
contourf
а также contour
методы ничего не рисуют там, где массив маскируется (см. здесь)! Таким образом, если вы хотите, чтобы область NaN-элементов графика была заштрихована, вам просто нужно определить фон графика как заштрихованный.
Смотрите этот пример:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
# generate some data:
x,y = np.meshgrid(np.linspace(0,1),np.linspace(0,1))
z = np.ma.masked_array(x**2-y**2,mask=y>-x+1)
# plot your masked array
ax.contourf(z)
# get data you will need to create a "background patch" to your plot
xmin, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()
xy = (xmin,ymin)
width = xmax - xmin
height = ymax - ymin
# create the patch and place it in the back of countourf (zorder!)
p = patches.Rectangle(xy, width, height, hatch='/', fill=None, zorder=-10)
ax.add_patch(p)
plt.show()
Вы получите эту цифру: