在 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)。然而,我目前的代码解决了我的问题。
我想为我在 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)。然而,我目前的代码解决了我的问题。