Graph 如何在八度音阶下对函数下的区域进行着色?

Graph 如何在八度音阶下对函数下的区域进行着色?,graph,numpy,scipy,octave,Graph,Numpy,Scipy,Octave,我想展示阈值对FAR和FRR的影响(基本上是x范围有界时曲线下的区域)。要做到这一点,我需要这样做 如果阈值移动,则由端点和阈值限定的相应区域也会移动。 我还想要两个不同颜色的对应区域。有没有办法在octave/python/任何其他工具中实现这一点。最简单的方法是什么 以及教科书作者如何绘制这些图形。这些肯定不是标准函数。在python中,可以使用matplotlib的: 在这里,alpha用于创建透明度,并在相交区域中组合两种颜色。您也可以使用不同的颜色为该区域上色: idx_intse

我想展示阈值对FAR和FRR的影响(基本上是x范围有界时曲线下的区域)。要做到这一点,我需要这样做

如果阈值移动,则由端点和阈值限定的相应区域也会移动。 我还想要两个不同颜色的对应区域。有没有办法在octave/python/任何其他工具中实现这一点。最简单的方法是什么


以及教科书作者如何绘制这些图形。这些肯定不是标准函数。

在python中,可以使用matplotlib的:

在这里,alpha用于创建透明度,并在相交区域中组合两种颜色。您也可以使用不同的颜色为该区域上色:

idx_intsec = 828
plt.fill_between(x[:idx_intsec], 0, y2[:idx_intsec], color='y')
plt.fill_between(x[idx_intsec:], 0, y1[idx_intsec:], color='y')

如果您只想要图形的底部部分(即,阈值之前和之后的功能区域),那么也很容易。让我们将我的绘图中的阈值定义为
x=7

thres = 7.
idx_thres = np.argmin(np.abs(x - thres))
plt.plot(x[:idx_thres], y2[:idx_thres], 'g-')
plt.plot(x[idx_thres:], y1[idx_thres:], 'r-')
plt.plot([thres, thres], [0, y1[idx_thres]], 'r-')
plt.fill_between(x[:idx_thres], y2[:idx_thres], color='g', alpha=0.6)
plt.fill_between(x[idx_thres:], y1[idx_thres:], color='r', alpha=0.6)

这在八度音阶中其实很简单。对另一个示例使用相同的代码(转换为倍频程):

我得到下面的数字

应该可以使用
FaceAlpha
更改区域的透明度,但显然这还没有在倍频程中实现(尽管有一天)。同时,您可以传递RGB值作为解决方法

area (x, y1,             "FaceColor", [0.0  0.0  0.8]);
hold on;
area (x, y2,             "FaceColor", [0.0  0.8  0.0]);
area (x, min ([y1; y2]), "FaceColor", [0.0  0.8  0.8]);
hold off

它们看起来不像函数,更像是图形中大量数据的表示。或者,知道它应该是什么样子,他们可以做一个猜测,然后用手画出来,但我怀疑任何有信誉的消息来源都会这样做。@Salvadodali实际上我想展示这一切可能的细节。我必须做一个关于这类分析的报告。所以,是的,虚线可以用来表示很少的东西。@FrankPresenciaFandos是的,我还需要一个工具,我可以用它来手工绘制(鼠标动作),并且这个函数可以自己形成所需的形状。只需点击一两下鼠标,即可对所需区域进行着色。我想要一个能做到这一点的工具。通过编写大量代码来实现这一点并没有多大帮助,因为这只是为了说明purpose@noPEx,如果您只是想要一些用于说明目的的东西,而不是编写大量代码,那么这可能不是提出问题的正确位置。也许这对我来说更好。
## create same fake data as other example
x = 0:0.1:20;
y1 = exp(-(x-6).**2 / 5);
y2 = 2 * exp(-(x-12).**2 / 8);

area (x, y1, "FaceColor", "blue");
hold on;
area (x, y2, "FaceColor", "red");
area (x, min ([y1; y2]), "FaceColor", "green");
hold off
area (x, y1,             "FaceColor", [0.0  0.0  0.8]);
hold on;
area (x, y2,             "FaceColor", [0.0  0.8  0.0]);
area (x, min ([y1; y2]), "FaceColor", [0.0  0.8  0.8]);
hold off