微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

散景:X轴日期格式和烛台图悬停日期问题

如何解决散景:X轴日期格式和烛台图悬停日期问题

我是Stackoverflow的新手,我正在尝试使用python中的bokeh构建烛台图表。我了解bokeh文档中有一个示例代码。我试图使用示例代码并重建我的图表。为了简单起见,我在下面的代码中粘贴了任意数据。

我有以下问题:

  1. 我们如何将图形设置为在x尺度上具有YYYY-MM-DD
  2. 有人可以解释W公式吗?我知道我们将以毫秒为单位获得一半的时间。但是为什么呢?
  3. 执行代码时,十字星图不会显示y轴的悬停日期(即,打开和关闭的时间相同)。 (这可能是没有vbar的bcos)但是我们如何克服它?

感谢有人可以提供帮助:) enter image description here 我的代码如下:

import pandas as pd 
  
# intialise data of lists. 
data = {'Date':['2020-10-10','2020-10-09','2020-10-08','2020-10-07','2020-10-06','2020-10-05','2020-10-04','2020-10-03'],'open':[20,21,19,18,30,10,15,18 ],'high':[25,28,24,20,40,'low':[18,12,'close':[32,8,20 ] } 
  
# Create DataFrame 
df = pd.DataFrame(data) 

df['Date2']   = pd.to_datetime(df['Date'],errors='coerce')

##graph below 
from math import pi
from bokeh.plotting import figure,output_file,show
from bokeh.models import ColumnDataSource,NumeralTickFormatter,HoverTool,DaysTicker,DatetimeTickFormatter

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 )

# 1 Pls help how do we code YYYY-MM-DD on the x-scale ? 
p.xaxis.formatter=DatetimeTickFormatter(months = ['%m/%Y','%b %Y'],years = ['%Y'])

p.xaxis.major_label_orientation = pi/4
p.grid.grid_line_alpha=0.8

# 2 Pls help on explaining the w
p.segment(df.Date2,df.high,df.Date2,df.low,color="black")
p.vbar(df.Date2[inc],w,df.open[inc],df.close[inc],fill_color="#D5E1DD",line_color="black")
p.vbar(df.Date2[dec],df.open[dec],df.close[dec],fill_color="#F2583E",line_color="black")

# 3 Pls help on the Hover tool,why single line do not have date displayed,how to we overcome it?
hover_tool = HoverTool(tooltips=[('Date',"@x{%Y-%m-%d}"),('Close','$y')],formatters={"@x": 'datetime'},)

p.add_tools(hover_tool)

show(p)  # open a browser

解决方法

  1. days=['%Y-%m-%d']添加到DatetimeTickFormatter构造函数中。所有格式均已记录在here
  2. 蜡烛在数据中相隔一天。将其宽度设置为半天只会在它们之间创建一些空间
  3. 该代码分别为每个渲染器创建隐式数据源。这些隐式数据源中的列以渲染器中的参数命名。 vbar具有x参数,因此其数据源具有该列。但是segmentx0x1,因此数据源没有x列,并且悬停工具也不知道从何处获取数据。 @x字段。 理想情况下,您应该自己创建带有所需列的数据源,并将其与列名一起提供给渲染器。本文档部分提供了更多示例的详细信息:https://docs.bokeh.org/en/latest/docs/user_guide/data.html

一个小注释-您将$y显示为Close,但这是不正确的。它只是一个坐标,而不是实际的“关闭”值。当您开始使用数据源时,将能够指定正确的列名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?