在Plotly中向条形图添加注释

时间:2016-02-25 20:42:14

标签: python pandas graph annotations 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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您正在寻找的答案在这里: 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)'
    )
)

如果你留下&#39; texposition&#39;空白,我相信你只能在悬停上获得文字

编辑:我想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'])
    ]
)

您可以根据需要编辑格式。如果有效,请告诉我。

答案 1 :(得分:0)

通过回答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

现在您可以添加&#34;注释&#34;到您的布局变量:

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

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