如何为条形图添加注释以标识差异?

6

我试图使用注释来显示柱状图之间的差异。具体来说,是显示所有柱子相对于第一个柱子的差异。

以下是我的代码:

import plotly.graph_objects as go


lables = ['a','b','c']

values = [30,20,10]

difference = [ str(values[0] - x) for x in values[1:] ]


fig = go.Figure( data= go.Bar(x=lables,y=values,width = [0.5,0.5,0.5] ) )


fig.add_annotation( x=lables[0],y= values[0], 
                    xref="x",yref="y",
                    showarrow=True,arrowhead=7,
                    ax = 1200, ay= 0  )

fig.add_annotation( x = lables[1], y=values[0],
                    xref="x",yref="y",
                    showarrow=True,arrowhead=1,
                    ax = 0 , ay = 100,
                    text= difference[0]
                     )


fig.show()

结果图像如下:

你可以看到,我试图使用注释来表明ab之间的差异。但是我不知道如何获取从a水平线到b顶部的垂直距离。
我想让一个箭头指向bc的顶部,并从水平线开始。我想知道是否有一种方法可以获得这个垂直距离或者是否还有其他方法可以实现相同的效果?
1个回答

1

可以轻松获取垂直距离:

diffs = [max(values) - v for v in values]

唯一的真正挑战是确保每个fig.add_annotations()参数正确。正确组合yanchoraxayref将为您提供此图表:

enter image description here

您可以在以下代码片段中仔细查看详细信息。如果您不喜欢数字的放置位置,我们也可以进行修复。

完整代码:

import plotly.graph_objects as go


labels = ['a','b','c']

values = [30,20,10]

diffs = [max(values) - v for v in values]

diff_labels = dict(zip(labels, diffs))
#print(diff_labels)

fig = go.Figure( data= go.Bar(x=labels,y=values,width = [0.5,0.5,0.5] ) )

for k, v in diff_labels.items():
    if v > 0:
        print(v)
        fig.add_annotation(x=k, y=max(values)-v, ax=0,
                           yanchor='bottom',
                           ay=max(values), ayref='y',
                           showarrow=True, arrowsize=2,
                           arrowhead=1,
                           text = v
                          )
        
fig.add_traces(go.Scatter(x=labels, y=[max(values)]*3, mode = 'lines',
                          line=dict(color='black', width=1)))
        
fig.show()

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