用散景为两条曲线之间的区域着色

时间:2019-11-20 08:57:16

标签: python-3.x bokeh

我有一个带有bokeh的代码。有两个数学函数,其中两个函数之间的间隔为[0,2]。如何用颜色填充该区域?我不能使用多边形,因为它不是多边形。 这是代码:

import numpy as np
from bokeh.plotting import *


N = 300
x0 = np.linspace(-1, 4, N)
x1 = np.linspace(0, 4, N)
y0 = 0.5 * (x0 ** 2)
y1 = np.sqrt(2 * x1)
y2 = -y1

# output to static HTML file
output_file('plotting_areas.html')

TOOLS = 'pan, wheel_zoom, box_zoom, reset,save, box_select, lasso_select'

p = figure(tools=TOOLS, width=350, height=350,
           title=None, x_range=(-1, 5), y_range=(-5, 5))
p.line(x0, y0)
p.line(x1, y1)
p.line(x1, y2)

show(p)

这是图像的更多详细信息。 Two Functions

谢谢

2 个答案:

答案 0 :(得分:1)

Bokeh内置没有任何功能,例如洪水,这确实是需要的。最好的选择是自己计算该区域的多边形近似值。

否则,您可以(原则上)创建一个自定义扩展以在JavaScript中执行泛洪填充,但是我不确定会花费多少精力。

答案 1 :(得分:1)

好的,我已经找到了散景的解决方案,它非常简单而且可行。关键是用OX间隔之间的每两个数学函数的图像制作两个向量(数组)。对于每个向量,制作一个带有补丁散景指令的多边形,不带边界线。 这是代码:

import numpy as np
from bokeh.plotting import *


N = 300
x0 = np.linspace(-1, 4, N)
x1 = np.linspace(0, 4, N)
y0 = 0.5 * (x0 ** 2)
y1 = np.sqrt(2 * x1)
y2 = -y1


def f1(x):
    return 0.5 * (x**2)


def f2(x):
    return np.sqrt(2 * x)


z = np.zeros(N)
w = np.zeros(N)
x = np.linspace(0, 2, N)
for i in np.arange(len(x)):
    z[i] = f1(x[i])
    w[i] = f2(x[i])

# output to static HTML file
output_file('plotting_areas.html')

TOOLS = 'pan, wheel_zoom, box_zoom, reset,save, box_select, lasso_select'

p = figure(tools=TOOLS, width=350, height=350,
           title=None, x_range=(-1, 5), y_range=(-5, 5))
p.line(x0, y0)
p.line(x1, y1)
p.line(x1, y2)
p.patch(x, z, color='red')
p.patch(x, w, color='red')

show(p)

这是具有最佳解决方案的图像:

The solution image

谢谢