关于#python#的问题:用plt.contour画的等值线,想问一下怎么才能只显示三角形内部的等值线部分

用plt.contour画的等值线,想问一下怎么才能只显示三角形内部的等值线部分?

step = 0.01
x = np.arange(0,2*sqrt(3)/3,step)
y = np.arange(0,1,step)

#meshgrid用于生成三维曲面的分格线座标
X,Y = np.meshgrid(x,y) 

#写入IM函数
def I(x,y):
    return ((0.31*(sqrt(3)*X-Y)/2 + 14.72*(1 - (sqrt(3)*X-Y)/2 - Y )+ 11.53*Y + 27.34*2.025)/
            (0.19*(sqrt(3)*X-Y)/2 + 5.48*(1 - (sqrt(3)*X-Y)/2 - Y) + 48.27*Y + 4.46*2.025))

#写入SM函数
def S(x,y):
    return ((2.42*(sqrt(3)*x-y)/2 + 70.25*(1 - (sqrt(3)*x-y)/2 - y) + 34.42*y + 61.52*2.025)/
            ((0.31*(sqrt(3)*x-y)/2 + 14.72*(1 - (sqrt(3)*x-y)/2 - y )+ 11.53*y + 27.34*2.025)+
            (0.19*(sqrt(3)*x-y)/2 + 5.48*(1 - (sqrt(3)*x-y)/2 - y) + 48.27*y + 4.46*2.025)))

#写入KH函数
def K(x,y):
    return (((53.13*(sqrt(3)*x-y)/2 + 1.41*(1 - (sqrt(3)*x-y)/2 - y) + 3.53*y + 4.79*2.025/100)-
            1.65*(0.31*(sqrt(3)*x-y)/2 + 14.72*(1 - (sqrt(3)*x-y)/2 - y )+ 11.53*y + 27.34*2.025/100)-
            0.33*(0.19*(sqrt(3)*x-y)/2 + 5.48*(1 - (sqrt(3)*x-y)/2 - y) + 48.27*y + 4.46*2.025/100))/
            (2.8*(2.42*(sqrt(3)*x-y)/2 + 70.25*(1 - (sqrt(3)*x-y)/2 - y) + 34.42*y + 61.52*2.025/100)))

#画等边三角形
plt.plot([0,sqrt(3)/3],[0,1],color='k')
plt.plot([sqrt(3)/3,2*sqrt(3)/3],[1,0],color='k')
plt.plot([0,2*sqrt(3)/3],[0,0],color='k')

#画等值线,设置颜色

IM = plt.contour(X,Y,I(X,Y),[1.7,1.8,1.9,2.0],colors='r')
SM = plt.contour(X,Y,S(X,Y),[1.7,1.8,1.9,2.0],colors='b')
KH = plt.contour(X,Y,K(X,Y),[0.6,0.7,0.8,0.9],colors='k')

img

我不知道我理解的对不对,你的意思是把三角形以外的线段都删掉是吧?
你可以算算每条线段与三角形的两条线的交点,然后限制这条线的X取值范围是从相交的左条线的交点到右条线的交点。

不知道你这个问题是否已经解决, 如果还没有解决的话:



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^