根据 Dataframe 中的单元格值用多个箭头注释绘图烛台图

Posted

技术标签:

【中文标题】根据 Dataframe 中的单元格值用多个箭头注释绘图烛台图【英文标题】:Annotate plotly candlestick chart with multiple arrows based on cell values in Dataframe 【发布时间】:2021-02-07 06:37:46 【问题描述】:

我有一个 Dataframe(我们称之为“df”),如下所示,用于使用 plotly 绘制烛台图:

         Date  Open  ...  Close                                   Headline
0  2020-10-23   190  ...    195  As Shares Tread Water Wait for a Pullback
1  2020-10-24   187  ...    177                    Why You Should Buy AAPL

在上面的 Dataframe 中,如果没有 Headline 数据,即“na”,我通过使用添加了一个默认值“No News”:

df['Headline'].fillna('No News', inplace=True)

为了将 Dataframe 绘制成烛台图,我使用了以下方法:

fig = go.Figure(data=[go.Candlestick(......

我使用了“hovertext”参数,因此当用户将鼠标悬停在特定烛台上时,您可以看到该特定日期的“标题”:

hovertext= df['Headline'] 

现在,我还想要用 箭头 和显示“新闻”的 文本 注释此烛台,以突出显示有此特定蜡烛的标题,因此用户无需悬停鼠标即可查看是否有标题(只需找出特定标题是什么)。 x 引用将是“日期”,而 y 引用可能会使用“高”。

我想我需要代码循环遍历每个标题并在烛台上注释 News!="No News"。如果 News=="No News",那么我不想在该特定实例中添加注释。

据我了解,基于此answer,注释接受列表,每个箭头的参数都是字典。所以,我使用了一个 for 循环来创建一个箭头字典列表,然后使用 fig.update_layout(annotations = list) 来绘制多个箭头。但是,这似乎不起作用(除非我误解了):

arrow_list=[]
counter=0
for i in df['Headline'].tolist():
       if i !="No News":
            arrow=dict(x=df['Headline'].values[counter],y=df['high'].values[counter],xref="x",yref="y",text="News",ax=20,ay=-30,arrowhead = 3,
                arrowwidth=1.5,
                arrowcolor='rgb(255,51,0)',)
            arrow_list.append(arrow)
            counter+=1
        else:
            counter+=1
fig.update_layout(title=f"ticker Stock Price for the past days day(s)",yaxis_title=f'ticker Price',
                    xaxis_title='Date',yaxis=dict(autorange=True, fixedrange=False, ),annotations=arrow_list)

任何帮助将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

好的。所以我想我知道这里出了什么问题。这是一个愚蠢的错误。我的箭头字典的“x”值错误。

目前是:

arrow=dict(x=df['Headline'].values[counter]....

但应该是:

arrow=dict(x=df['date'].values[counter]....

【讨论】:

以上是关于根据 Dataframe 中的单元格值用多个箭头注释绘图烛台图的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas Dataframe 用同一会话的另一个单元格的值替换单元格值

如何将 DataFrame 中的每一行/单元格值转换为 pandas 中的字典列表?

从 Dataframe 获取单个单元格值的更快方法(仅使用转换)

如何在列中搜索多个字符串并更新单元格值?

根据表格中的单元格值隐藏按钮

如何根据Datatables jquery中的单元格值禁用行复选框