在 Plotly 中向条形图添加注释

Adding annotations to a bar graph in Plotly

我想为我在 Plotly 中创建的条形图添加一些注释。我只是想在每个栏上显示数据值,而不需要将鼠标悬停在它上面。

大部分数据操作已经完成,我的两个主要数据框已经创建:

In [1]: df_MMCAlist
Out[1]:
   List Date  Total
0    2015-01    131
1    2015-02    102
2    2015-03    116
3    2015-04    104
4    2015-05    105
5    2015-06     87
6    2015-07     68
7    2015-08     58
8    2015-09     73
9    2015-10     76
10   2015-11     74
11   2015-12     67

In [2]:df_MMCAsale
Out[2]: 
   Sale Date  Total
0    2015-01     70
1    2015-02     42
2    2015-03     92
3    2015-04     36
4    2015-05     49
5    2015-06     47
6    2015-07     34
7    2015-08     37
8    2015-09     42
9    2015-10     39
10   2015-11     42
11   2015-12     32

这是我的图表:

bar_MMCAlist = go.Bar(
    x=df_MMCAlist['List Date'],
    y=df_MMCAlist['Total'],
    name='Listings',
    marker=dict(
        color='rgb(242,137,17)'
    )
)

bar_MMCAsale = go.Bar(
    x=df_MMCAsale['Sale Date'],
    y=df_MMCAsale['Total'],
    name='Sales',
    marker=dict(
        color='rgb(0,153,0)'
    )
)

data = [bar_MMCAlist, bar_MMCAsale]
layout = go.Layout(
    barmode='group',
    xaxis=dict(nticks=13),
)

fig = go.Figure(data=data, layout=layout)

plot_url = py.plot(fig, filename = 'Yearly Performance')

<a href="https://plot.ly/~ryebooks/14/" target="_blank" title="Listings vs Sales" style="display: block; text-align: center;"><img src="https://plot.ly/~ryebooks/14.png" alt="Listings vs Sales" style="max-width: 100%;width: 1620px;"  width="1620" onerror="this.onerror=null;this.src='https://plot.ly/404.png';" /></a>
    <script data-plotly="ryebooks:14"  src="https://plot.ly/embed.js" async></script>

您要找的答案在这里: https://plot.ly/python/text-and-annotations/

对于您的代码,它类似于:

bar_MMCAsale = go.Bar(
    x=df_MMCAsale['Sale Date'],
    y=df_MMCAsale['Total'],
    name='Sales',
    text = df_MMCAsale['Total'],
    textposition='top right',
    textfont=dict(
        family='sans serif',
        size=18,
        color='#1f77b4'
    )
    marker=dict(
        color='rgb(0,153,0)'
    )
)

如果您将 'texposition' 参数留空,我相信您只会在鼠标悬停时看到文本

编辑:我猜 textposition arg 不适用于条形图。我已经名义上测试了类似下面的代码,应该可以工作吧。

bar_MMCAsale = go.Bar(
    x=df_MMCAsale['Sale Date'],
    y=df_MMCAsale['Total'],
    name='Sales',
    marker=dict(
        color='rgb(0,153,0)'
    )
)
layout = go.Layout(
    showlegend=False,
    annotations=[
        dict(
            x=xpos,
            y=ypos,
            xref='x',
            yref='y',
            text=str(ypos),
            showarrow=True,
            arrowhead=7,
            ax=0,
            ay=-40
    ) for xpos, ypos in zip(df_MMCAsale['Sale Date'], df_MMCAsale['Total'])
    ]
)

您可以根据需要编辑格式。让我知道这是否有效。

通过处理 Sam 的回答并参考 33873298,我能够创建一些注释。

正在创建注释:

# Specify the y-position of the labels
y1 = df_MMCAlist['Total']
y2 = df_MMCAsale['Total']

xcoord = df_MMCAsale['Sale Date'] # Specify the x-position of the labels

annotationsList = [dict(
                x=xi,
                y=yi,
                text=str(yi),
                xanchor='right',
                yanchor='bottom',
                showarrow=False,
            ) for xi, yi in zip(xcoord, y1)]

annotationsSale = [dict(
                x=xi,
                y=yi,
                text=str(yi),
                xanchor='left',
                yanchor='bottom',
                showarrow=False,
            ) for xi, yi in zip(xcoord, y2)]

annotations = annotationsList + annotationsSale

现在您可以将 "annotations" 添加到布局变量中:

layout = go.Layout(
    barmode='group',
    annotations=annotations,
    xaxis=dict(nticks=13),
)

由于 x 轴是日期/字符串,我无法更好地定位注释(例如,我无法利用 33873298 中使用的 +0.2 和 -0.2)。然而,我目前的代码解决了我的问题。