在同一图形上绘制Bokeh的烛台和音量条

Plotting candlesticks and volume bars in Bokeh on the same figure(在同一图形上绘制Bokeh的烛台和音量条)
本文介绍了在同一图形上绘制Bokeh的烛台和音量条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上,我想做与shown in this question相同的事情,但增加了两个修改:

  • 将烛台和体积合并为一个图形
  • 有两个y轴,这样它们可以独立滚动/缩放(例如,当烛台轴被滚轮缩放时,只有烛台应该改变大小,而音量条不应该改变-音量条反之亦然)

这是Bokeh可以做的事情吗?

推荐答案

可以将这两个图形合并为一个。但据我所知,不可能通过单击轴来选择数据。而是添加图例以隐藏不在焦点中的数据。

如果您还没有数据,请先运行此代码段。

import bokeh
bokeh.sampledata.download()

这是创建图形的代码。

import pandas as pd
import numpy as  np
from bokeh.plotting import figure, output_notebook, show
from bokeh.sampledata.stocks import MSFT
from bokeh.models import LinearAxis, Range1d, Segment, Legend
output_notebook()

df = pd.DataFrame(MSFT)[:50]
df["date"] = pd.to_datetime(df["date"])
inc = df.close > df.open
dec = df.open > df.close
w = 12*60*60*1000 # half day in ms

TOOLS = "pan,wheel_zoom,box_zoom,reset,save"
p = figure(x_axis_type="datetime", tools=TOOLS, 
           plot_width=700, plot_height=300, 
           title = "MSFT Candlestick with Volume")
p.add_layout(Legend(click_policy="hide", orientation='horizontal', spacing=20), 'below')
# left y axis
low, high  = df[['open', 'close']].min().min(), df[['open', 'close']].max().max()
diff = high-low
p.y_range = Range1d(low-0.1*diff, high+0.1*diff)
p.yaxis.axis_label = 'Price'
p.segment(df.date, df.high, df.date, df.low, color="black", legend_label='Candlestick')
p.vbar(df.date[inc], w, df.open[inc], df.close[inc], 
       fill_color="#D5E1DD", line_color="black", legend_label='Candlestick')
p.vbar(df.date[dec], w, df.open[dec], df.close[dec], 
       fill_color="#F2583E", line_color="black", legend_label='Candlestick')
# right y axis
p.extra_y_ranges.update({'two':  Range1d(0, 1.1*df.volume.max())})
p.add_layout(LinearAxis(y_range_name='two', axis_label='Volume' ), 'right')
p.vbar(df.date, w, df.volume, [0]*df.shape[0], alpha=0.5, level='underlay', 
       legend_label='Volume', y_range_name='two')
show(p)
创建的图形如下所示:

这篇关于在同一图形上绘制Bokeh的烛台和音量条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)