Bokeh的须头颜色是什么意思?

3
我想为我的点线图绘制误差线条(std)。 我没有找到正确的答案如何做到这一点,但其中一种解决方案是使用whisker。 https://docs.bokeh.org/en/latest/docs/user_guide/annotations.html#whiskers 它对我很有效,但我有一个问题,即如何更改whisker头的颜色。
我使用了线条颜色属性来更改线条的颜色: https://docs.bokeh.org/en/latest/docs/reference/models/annotations.html#bokeh.models.annotations.Whisker 但它没有改变头部(水平线)的颜色。 它仍然是黑色的。 有没有办法做到这一点? 或者有更好的方法以线的颜色绘制误差线?
来自bokeh的示例代码,其中红色线和黑色头用于误差条:
from bokeh.models import ColumnDataSource, Whisker
from bokeh.plotting import figure, show
from bokeh.sampledata.autompg import autompg as df

colors = ["red", "olive", "darkred", "goldenrod", "skyblue", "orange", "salmon"]

p = figure(plot_width=600, plot_height=300, title="Years vs mpg with Quartile Ranges")

base, lower, upper = [], [], []

for i, year in enumerate(list(df.yr.unique())):
    year_mpgs = df[df['yr'] == year]['mpg']
    mpgs_mean = year_mpgs.mean()
    mpgs_std = year_mpgs.std()
    lower.append(mpgs_mean - mpgs_std)
    upper.append(mpgs_mean + mpgs_std)
    base.append(year)

source_error = ColumnDataSource(data=dict(base=base, lower=lower, upper=upper))

p.add_layout(
    Whisker(source=source_error, base="base", upper="upper", lower="lower", line_color='red')
)

for i, year in enumerate(list(df.yr.unique())):
    y = df[df['yr'] == year]['mpg']
    color = colors[i % len(colors)]
    p.circle(x=year, y=y, color=color)

show(p)
1个回答

4

通过 upper_headlower_head 属性可以配置晶须的末端,它们是 ArrowHead 对象,拥有自己的 line_color 等属性。最简单的配置方法可能是这样的:

w = Whisker(source=source_error, base="base", upper="upper", lower="lower", 
            line_color='red')
w.upper_head.line_color = 'red'
w.lower_head.line_color = 'red'
p.add_layout(w)

如果你真的想在一个表达式中完成所有操作,也可以将显式配置的TeeHead传递给Whisker

Whisker(..., 
        upper_head=TeeHead(line_color='red'), 
        lower_head=TeeHead(line_color='red'))

感谢您提供的解决方案。 - undefined
1
第二种解决方案需要 from bokeh.models.arrow_heads import TeeHead,并且(至少对于我的示例)将 line_width 重置为其默认值,这个值大约是原来的两倍。第一种方法非常有效。 - undefined
没错,这只是为了说明技术而已,你仍然需要根据自己的需求完全配置它。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接