python - 在 plotly 中绘制水平线
问题描述
我正在尝试使用 plotly 将水平线叠加到烛台图表上。但是,当我无法让水平线从它们的“x”坐标开始时,该坐标位于df['date'][level[0]]
. 相反,水平线从 ax=0 开始。
以下是到目前为止我设法收集的内容,我想这对有经验的人来说并不漂亮。
但是,任何提供帮助的指针将不胜感激:
import plotly.graph_objects as go
from plotly.offline import plot
import datetime as dt
from pandas import DataFrame
import numpy as np
import pandas as pd
hovertext=[]
for i in range(len(df['bidopen'])):
hovertext.append('Datetime: '+str(df['date'][i])+'<br>Open: '+str(df['bidopen'][i])+'<br>Close: '+str(df['bidclose'][i]))
fig = go.Figure(data=go.Candlestick(x=df['date'],
open=df['bidopen'],
high=df['bidhigh'],
low=df['bidlow'],
close=df['bidclose'],
text=hovertext,
hoverinfo='text'))
for level in levels:
fig.add_hline(level[1], df['date'][level[0]], exclude_empty_subplots=True)
plot(fig)
这是我的 plotly 代码当前生成的屏幕截图(当前输出):
以下是我试图在水平线方面实现的目标(所需的输出):
..第二个屏幕截图代表了我能够使用 matplotlib 生成的内容
解决方案
由于hline()
将图在两侧扩展到无穷大,您可以使用add_shape()
方法。
考虑如下数据框:
df = pd.DataFrame(data = {'levels':np.random.random(10)*10,
'dates':pd.date_range(start = '2020-11-01', periods = 10)})
df
levels dates
0 9.149079 2020-11-01
1 0.294123 2020-11-02
2 5.401443 2020-11-03
3 4.043063 2020-11-04
4 8.878100 2020-11-05
5 5.275614 2020-11-06
6 4.425696 2020-11-07
7 8.228720 2020-11-08
8 7.632410 2020-11-09
9 7.045191 2020-11-10
&一个已经有你想要的日期作为索引的数字:
您可以执行以下操作:
for row in df.iterrows():
fig.add_shape(type="line", x0= row[1]['dates'],
y0 = row[1]['levels'],
x1 = df.dates.max(),
y1 = row[1]['levels'], fillcolor = 'yellow')
fig
结果是:
推荐阅读
- python - 使用 tkinter 显示和保存饼图
- python - 如何删除电报 api 中的队列更新?
- python - Python,用“with”语句包装函数的装饰器
- ios - 在 Cloud Kit 中获取 CKAsset 的大小
- ffmpeg - HW Accel 转码 Intel 快速同步视频 QSV h264_qsv 和 CRF 质量
- haskell - 为什么它是最外层的redex?
- haskell - 使用 ALE linter 处理 Haskell 文件时出现不正确的导入错误
- linux - 如何让 Linux USB 小工具和网络驱动程序相互通信
- python - 如何在 statsmodel ols 中获得“样本内”预测值(y hat)?
- sql - 来自多个 ID 的单一身份的 SQL 解决方案