如何注释条之间的差异?

Posted

技术标签:

【中文标题】如何注释条之间的差异?【英文标题】:How to annotate difference between bars? 【发布时间】:2020-12-12 12:22:27 【问题描述】:

我正在尝试使用注释来显示条形之间的差异。具体来说,显示所有条之间相对于第一个条的差异。

我的代码如下所示:

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】:

垂直距离可以通过以下方式轻松获得:

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

唯一真正的挑战是正确获取fig.add_annotations() 的每个参数。 yanchoraxayref 的正确组合会给你这个情节:

您可以在下面的 sn-p 中仔细查看详细信息。如果您不喜欢数字的位置,我们也可以解决。

完整代码:

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()

【讨论】:

以上是关于如何注释条之间的差异?的主要内容,如果未能解决你的问题,请参考以下文章

绘制差异基因kegg注释图

如何以天为单位注释日期时间的差异

CRAN 包检查和 R CMD 检查-as--cran 之间的差异

.NET // vs /// 注释约定

如何为多个组绘制带有注释的堆叠条

注释 公式 语言 日期 差异