我试图为分组条形图创建注释,其中每个条都有一个特定的数据标签,显示了该条的值,并位于该条的中心上方。
为了实现这一点,我尝试对教程中的示例进行了简单的修改,如下所示:
import plotly.plotly as py
import plotly.graph_objs as go
x = ['Product A', 'Product B', 'Product C']
y1 = [20, 14, 23]
y2 = [12, 18, 29]
annotations1 = [dict(
x=xi,
y=yi,
text=str(yi),
xanchor='auto',
yanchor='bottom',
showarrow=False,
) for xi, yi in zip(x, y1)]
annotations2 = [dict(
x=xi,
y=yi,
text=str(yi),
xanchor='auto',
yanchor='bottom',
showarrow=False,
) for xi, yi in zip(x, y2)]
annotations = annotations1 + annotations2
trace1 = go.Bar(
x=x,
y=y1,
name='SF Zoo'
)
trace2 = go.Bar(
x=x,
y=y2,
name='LA Zoo'
)
data = [trace1, trace2]
layout = go.Layout(
barmode='group',
annotations=annotations
)
fig = go.Figure(data=data, layout=layout)
plot_url = py.plot(fig, filename='stacked-bar')
这就产生了这个情节:https://plot.ly/~ashish.baghudana/49.embed
然而,数据标签不是集中在单个的条上,而是集中在每一组条的中心上。我想知道是否有一个解决办法,而不是手动注释。
最佳答案
这有点老套,但能完成任务。
x = ['Product A', 'Product B', 'Product C']
y1 = [20, 14, 23]
y2 = [12, 18, 29]
xcoord = [0,1,2]
annotations1 = [dict(
x=xi-0.2,
y=yi,
text=str(yi),
xanchor='auto',
yanchor='bottom',
showarrow=False,
) for xi, yi in zip(xcoord, y1)]
annotations2 = [dict(
x=xi+0.2,
y=yi,
text=str(yi),
xanchor='auto',
yanchor='bottom',
showarrow=False,
) for xi, yi in zip(xcoord, y2)]
annotations = annotations1 + annotations2