【问题标题】:How to fill area different colors depending on y in Bokeh如何根据散景中的y填充不同颜色的区域
【发布时间】:2020-04-23 14:48:42
【问题描述】:

当 y>=0 时填充颜色应为绿色,当 y

from bokeh.plotting import figure, output_file, show
import numpy as np

strike1 = 20 #Long Call
premium1 = 0.5
price = np.arange(15,25,0.01)
contracts = 1

def long_call(price, strike1, premium1, contracts):
    P = []
    for i in price:
        P.append((max(i - strike1, 0) - premium1) * (contracts * 100))
    return np.array(P)


# output to static HTML file
output_file("lines.html")

# create a new plot with a title and axis labels
p = figure(title="Option Payoff", x_axis_label='Underlying Price ($)', y_axis_label='Profit/Loss ($)')

# add a line renderer with legend and line thickness
p.line(x, y, line_width=2)
p.varea(x=x, y1=y, fill_alpha=1, fill_color='#3cb371')

# show the results
show(p)

【问题讨论】:

    标签: python bokeh


    【解决方案1】:

    VArea 字形是连续的,但只需通过变换使y1y2 相同,将一些区域折叠成一个 0 区域块,就可以使它看起来像单独的部分。

    import math
    
    from bokeh.models import ColumnDataSource, CustomJSTransform
    from bokeh.plotting import figure, show
    from bokeh.transform import transform
    
    N = 100
    ds = ColumnDataSource(dict(x=[i / 10 for i in range(N)],
                               y=[math.sin(i / 10) for i in range(N)]))
    p = figure()
    p.line('x', 'y', source=ds, line_width=3)
    p.varea(x='x', y1=transform('y', CustomJSTransform(v_func="return xs.map(x => x > 0 ? x : 0)")),
            y2=0, source=ds, color='green', fill_alpha=0.5)
    p.varea(x='x', y1=transform('y', CustomJSTransform(v_func="return xs.map(x => x < 0 ? x : 0)")),
            y2=0, source=ds, color='red', fill_alpha=0.5)
    
    show(p)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2021-01-03
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多