我想在Python语言中绘制一个分段函数,其中有两个变量x
和y
。这意味着我需要某种等高线图。在Matlab中,可以使用
syms x y
eq1 = 0.1*(x/2)^2-0.3*(y/4)^2;
eq2 = 0.15*(x/3)^2-0.25*(y/2)^2;
ezplot(eq1,[-5 5 -10 10]);
hold on
ezplot(eq2,[-4 4 -5 5]);
其中ezplot
在xmin < x < xmax
和ymin < y < ymax
上绘制eq1 = 0
。在Python中有没有(简单的)等价函数?
我已经研究了this post中的解决方案。他们的问题只涉及一个变量x
,所以对我的情况没有帮助。
发布于 2019-02-26 10:24:57
您可以使用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)
现在我们需要一个2D掩码(或者更多,取决于分段函数的片断数量)来分隔函数不同片断的定义范围:
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')
https://stackoverflow.com/questions/54882970
复制