我希望填补两个预定义函数之间的空白,即:
def stravinska_SII(log_SII_Ha, eps=0):
strav_SII = 1.2 + eps + 0.61 / (log_SII_Ha - eps + 0.2)
strav_SII[log_SII_Ha > eps + 0.05] = -2
return strav_SII
以及
^{pr2}$然而,在移动np.linspace
以给出函数适当的边界(当它朝y=+∞方向发射时),我现在有一个未填充的补丁。我想知道我是否可以问社区如何用一种新的方法填补空白。。。?在
以下是我将称之为修补程序问题的图片:
注意:我希望我可以定义一些函数,例如,在y=1.5的-0.2<;x<;0.06之间的一条水平线,我可以用它来填充(因为axhline使用了缩放关系,所以很有问题…)
我的问题的一个独立的情节是:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib import pyplot as plt
SII = np.linspace(-3.0, 0.20)
SIIs = np.linspace(-3.0,-0.38)
def log_OIII_Hb_SII(log_SII_Ha, eps=0):
return 1.30 + eps + 0.72 / (log_SII_Ha - eps - 0.32)
def stravinska_SII(log_SII_Ha, eps=0):
strav_SII = 1.2 + eps + 0.61 / (log_SII_Ha - eps + 0.2)
strav_SII[log_SII_Ha > eps + 0.05] = -2
return strav_SII
fig = plt.figure()
gs_left = gridspec.GridSpec(1, 1)
ax = fig.add_subplot(gs_left[0,0])
ax.plot(SII, log_OIII_Hb_SII(SII), '-k')
ax.plot(SII, log_OIII_Hb_SII(SII, 0.1), '--k')
ax.plot(SII, log_OIII_Hb_SII(SII, -0.1), '--k')
ax.plot(SIIs, stravinska_SII(SIIs), '-.k')
ax.set_xlim(-2.0, 1.0)
ax.set_ylim(-1.5, 2.5)
ax.fill_between(SII, log_OIII_Hb_SII(SII), stravinska_SII(SII), where=log_OIII_Hb_SII(SII)>=stravinska_SII(SII),
facecolor='gray', alpha=0.45, edgecolor='none')
plt.show()
stravinska_SII
在x=-0.2处有一条渐近线。Matplotlib适当地尝试在x>;-0.2的行上填充。您正在使用fill_between
where=
参数隐藏此填充。在您需要更改函数
stravinska_SII
,使其不产生大于x=-0.2的大正数,或者接受在该行上方填充是适当的这一事实。在只要您有良好的连续(相对于X)数据,
fill_between
就可以很好地工作。如果你不这样做,你可以考虑其他一些方法。在一种可能是手工创建多边形。多边形将具有以下边:
好的一点是,使用这种方法,您没有任何x/y约束,而且如果需要,您甚至可以使用参数化曲线。在
应用于您的简单示例:
这样,您的示例变成:
相关问题 更多 >
编程相关推荐