我有一个用例,其中我以Forex
的形式绘制ask and bid
数据并将其绘制在图形上,这是基于minute, hour or day candlesticks
的,我只绘制了{{1 closing
的}}值作为bid and ask
。
从spline
到Forex
,我正在使用其Friday 8pm
数据馈送的端点不可用。假设我有以下用例
Sunday 9pm
中数据点的datetime
UTC ISO Format
当4.1 days worth of hourly candle
上的pretty
没有任何间隔时,图形为smooth
和datetime
。蜡烛时间戳以以下格式返回
x-axis
一旦出现差距(2018-06-29T16:00:00.000000000Z
2018-06-29T17:00:00.000000000Z
2018-06-29T19:00:00.000000000Z
2018-06-29T20:00:00.000000000Z (Friday last candle 8pm)
2018-07-01T21:00:00.000000000Z (Sunday first candle 9pm)
2018-07-01T22:00:00.000000000Z
2018-07-01T23:00:00.000000000Z
2018-07-02T00:00:00.000000000Z
左右),所有内容都会被压缩以适应图的拉伸部分,如下所示(使用plotly.js)
大多数情况下,财务图表无法显示差距。例如,查看TradingView交互式图表,您将看到47-49 hours
的以下内容
如果您知道如何使用开源图表库(weekend
除外)解决此问题,请分享您的解决方案。
答案 0 :(得分:3)
根据我的发现,您可以使用HighStock
库中的Highcharts
消除差距。 Highcharts是开源的,只能免费用于Non-commercial
,有关更多详细信息,请参见highcharts licensing
我最初从plotly.js开始,因为老实说它确实是一个非常好的图表库。在datetime gap
上遇到x-axis
问题(请参阅相关屏幕截图)后,我研究了解决方案并遇到了以下问题
https://community.plot.ly/t/tickformat-without-weekends/1286/5(论坛)
https://github.com/plotly/plotly.js/issues/1382(锁定的github线程)
根据上面的Github
问题链接,目前无法在datetime
上处理x-axis
的方式。有解决方法(如上面的第3个链接),但是,我尝试了一些方法,但是它要么无效,要么丢失了一些信息。
我得出的结论是,尽管plotly
是一个很棒的库,但在这种情况下它根本无法帮助我。如果您认为可以,请分享您的解决方案:)
在对制图库进行了更多研究之后,我尝试了C3.js,并在datetime
的x轴上编辑了他们的实时演示示例之后,观察到了相同的周末间隙问题(参见下文)>
我没有去研究为什么,那可能是因为像D3.js
一样基于plotly.js
。如果您认为C3.js
可以解决日期时间差异,请随时分享您的解决方案。
我终于遇到了Highxxxxx
图形库家族,乍一看它看起来非常漂亮,并提供了我想要的所有功能。我尝试了Highchart
,并且遇到了相同的周末空缺问题
好吧,我开始认为唯一的解决方案是根本NOT TO PLOT
中的datetime
x-axis
,并以某种方式显示tooltip
中的日期时间,这似乎可以解决作业如下所示
但是,由于太固执,我放弃了我的研究。我真的很想完成像TradingView
这样的图表绘制和其他股票可视化。
我决定进行更多研究,但几乎不知道我是如此接近采用相同的图表库Highcharts
的解决方案,它被称为HighStock
HighStock默认情况下会处理这些差距,如下所示
我使用了以下Javascript
Highcharts.setOptions({
global: {
useUTC: false
}
});
Highcharts.StockChart('chart', {
chart: {
type: 'spline',
events: {
load: function () {
console.log('Highcharts is Loaded! Creating a reference to Chart dom.')
//store a reference to the chart to update the data series
var index=$("#chart").data('highchartsChart');
highchartRef = Highcharts.charts[index]; //global var
//Initiating the data pull here
}
}
},
title: {
text: 'Chart title'
},
series: [
{
name: 'Ask',
data: [],
tooltip: {
valueDecimals: 7
},
marker: {
enabled: true
}
},
{
name: 'Bid',
data: [],
tooltip: {
valueDecimals: 7
},
marker: {
enabled: true
}
}
]
});
在这里,您将获得一个datetime
x轴的无间隙(不确定是否是真实词)财务图表。
我已经研究过,但是没有尝试以下图表库
Plotly
和Highcharts
的文档,交互性以及与财务相关的图表。 我发现Highcharts
是
gaps
相关的类似SO问题How can I hide data gaps in plotly?
HighCharts datetime xAxis without missing values (weekends)(图表)
Remove weekend gaps in gnuplot for candlestick chart(烛台图,炮台图)
How to remove gaps in C3 timeseries chart?(c3 / d3-小提琴无法正常工作,因此很难找到解决方法)
How to remove weekends dates from x axis in dc js chart(c3.js-差距有些差距)
答案 1 :(得分:2)
Plotly现在支持在距离突破的帮助下将周末和节假日隐藏在图表中。检查此链接:https://plotly.com/python/time-series/转到“隐藏周末和假期”部分
下面是从此链接复制的部分,示例适用于plotly.express,但也适用于plotly.graph_objects
隐藏周末和假期 date类型的x轴和y轴上可用的rangebreaks属性可用于隐藏某些时间段。在下面的示例中,我们显示了两个图表:一个处于默认模式下以显示数据中的差距,另一个在其中隐藏周末和节假日以显示不间断的交易历史。请注意,12月21日和1月4日的网格线之间的间隙较小,其中删除了假日。请参阅参考资料以获取更多选项:https://plotly.com/python/reference/#layout-xaxis-rangebreaks
_id
people array
答案 2 :(得分:1)
使用类别作为xaxis类型对我来说效果很好(请注意go.Layout对象):
import plotly.graph_objects as go
layout = go.Layout(
xaxis=dict(
type='category',
)
)
fig = go.Figure(data=[go.Candlestick(x=self.price_df.index.to_series(),
open=self.price_df[e.OHLCV.OPEN.value],
high=self.price_df[e.OHLCV.HIGH.value],
low=self.price_df[e.OHLCV.LOW.value],
close=self.price_df[e.OHLCV.CLOSE.value])],
layout=layout)
fig.show()
答案 3 :(得分:1)
尝试将其添加到fig.show()
fig.update_xaxes(
rangebreaks=[
dict(bounds=["sat", "sun"]), #hide weekends
]
)
或
fig.layout.xaxis.type = 'category'
答案 4 :(得分:1)
首先,无需退出Plotly。范围中断的使用确实是要使用的工具,但这只是它的一方面。我之所以这样说,是因为对于股票数据而言,与值相比,边界是不切实际的,但是您将指定每年许多假期的日期,并且大多数日期会从一年改为另一年。因此,请使用范围中断的值,并向其提供正在加载的CSV文件中没有的每个日期的列表。如果您需要更大的努力来解决此问题,我的意思是将“日期”列放在一边,遍历它,并附加另一个列表中没有的日期。然后,您可以 fig.update_xaxes(rangebreaks = [dict(values = mylistofdates)]) 希望这能带您回到Plotly!