Вы можете разделить различные части, используя numpy
masked array
.
Сначала определите ваши функции, диапазоны x и y и их 2D-версии для контурного графика:
import numpy as np
import matplotlib.pyplot as plt
from numpy.ma import masked_array as marr
def eq1(x, y):
return 0.1*(x/2)**2-0.3*(y/4)**2
def eq2(x, y):
return 0.15*(x/3)**2-0.25*(y/2)**2
x = np.linspace(-5, 5, 101)
y = np.linspace(-10, 10, 201)
xx, yy = np.meshgrid(x, y)
Теперь нам нужна двумерная маска (или несколько, в зависимости от количества частей кусочной функции), чтобы разделить диапазоны определения различных частей функции:
maskx = ((xx>=-4) * (xx<=4))
masky = ((yy>=-5) * (yy<=5))
mask = maskx * masky
Это может быть применено к различнымМаскированные массивы:
res1 = marr(eq1(xx, yy), mask)
res2 = marr(eq2(xx, yy), ~mask)
При построении массива в масках все области остаются пустыми, где маска имеет значение True:
fig, axs = plt.subplots(1, 2, sharey=True)
axs[0].contour(xx, yy, res1)
axs[0].contour(xx, yy, res2)
axs[0].set_title('contour')
axs[1].contourf(xx, yy, res1)
axs[1].contourf(xx, yy, res2)
axs[1].set_title('contourf')
![enter image description here](https://i.stack.imgur.com/GcvKR.jpg)