在Plotly中为图表注释添加自定义标签

3
我正在创建一些图表,它们将添加各种注释,表示单个条件的存在。
我想在图例中添加标签,以指定这些注释所代表的内容。
以下是一个简化的示例:
import pandas as pd
import numpy as np
import plotly.graph_objects as go

dates = pd.date_range(start='2020-01-01', periods=100)
random = np.random.RandomState(0)
df = pd.DataFrame({
  #'data': data1
'data': np.random.uniform(low=0, high=100, size=100).tolist()
}, index=dates)

fig = go.Figure()
fig.add_trace(go.Scatter(x=df.index, y=df['data']))
arrow_dates = df[df.data > 0.8].index
arrow_values = df[df.data > 0.8]['data'].tolist()
annotation_arrows = [dict(x=arrow_date, y=arrow_val, showarrow=True, arrowwidth=2, 
        arrowhead=1, arrowcolor='blue', yshift=10, arrowside='end') for arrow_date, arrow_val in zip(arrow_dates, arrow_values)]
fig.update_layout(annotations=annotation_arrows)
fig.show()

这提供了以下的图表:

enter image description here

我想要做的是,为该图表添加一个说明符号,描述条件是什么。理想情况下,它会是箭头本身的图标,并带有其描述,比如“数据>0.8”,在图表说明中加入箭头的图片。

这是可能的吗?

谢谢。

1个回答

2
为了在图例中优雅地设置这个,我认为最好的方法是加入一个新的迹线,标记什么时候达到某种条件。下面的片段用以下方式实现:
fig.add_traces(go.Scatter(x=df.index, y=df['condition1']*1.05, mode='markers',
                         marker = dict(symbol='triangle-down'), name = 'Condition 1'))

请查看 Plotly的标记样式,找到一个比'triangle-down'更适合您需求的。这可能不是完美的解决方案,但至少您可以在图例中整齐地获取所需信息:

enter image description here

带有示例数据的完整代码:

import pandas as pd
import numpy as np
import plotly.graph_objects as go

dates = pd.date_range(start='2020-01-01', periods=100)
random = np.random.RandomState(0)
df = pd.DataFrame({
  'data': np.random.uniform(low=0, high=100, size=100).tolist()
}, index=dates)

df['condition1'] = 99

fig = go.Figure()
fig.add_trace(go.Scatter(x=df.index, y=df['data']))
arrow_dates = df[df.data > 0.95].index
arrow_values = df[df.data > 0.95]['data'].tolist()
# annotation_arrows = [dict(x=arrow_date, y=arrow_val, showarrow=True, arrowwidth=2, 
#         arrowhead=1, arrowcolor='blue', yshift=10, arrowside='end') for arrow_date, arrow_val in zip(arrow_dates, arrow_values)]
#fig.update_layout(annotations=annotation_arrows)

df['condition1'] = df['data'].where(df['data']>95)

fig.add_traces(go.Scatter(x=df.index, y=df['condition1']*1.05, mode='markers',
                         marker = dict(symbol='triangle-down'), name = 'Condition 1'))

fig.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接