[英]Plotly: How to prevent text overlapping between traces?
我正在使用条形图和散点图。 我必须将值显示为文本,而不是使用悬停文本。 我没有找到阅读文档的答案。 也许你能帮我!
如果我能找到一种在条形底部设置条形文本的方法,那就太好了。
请参阅我的代码和下面的情节,非常感谢!
from plotly import graph_objs as go
from plotly.subplots import make_subplots
meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
rlzd = [335101.3, 693658.5, 335101.3, 800019, 514379, 594379, 581279, 310029, 485022, 692091, 227918]
meta = [660756.5, 658980.9, 527478.1, 800019, 603574.5, 584198.7, 590098, 571476.2, 616965.7, 676205.1, 617237.94, 613634.7]
fig = make_subplots(rows=1, cols=2, column_widths=[0.85, 0.15], print_grid=True, horizontal_spacing=0.05)
fig.add_trace(go.Bar(
x=meses,y = rlzd,
text=rlzd,
textfont=dict(size=15,color='white'),
textposition='auto',
name = 'Realizado',
showlegend=True),
row=1, col=1)
fig.add_trace(go.Scatter(
x=meses,y=meta,
name='Meta',
mode='markers+lines+text',
text=meta,
textfont=dict(size=13,color='black'),
textposition="top right",
marker_size=8,
showlegend=True,
line = go.scatter.Line(color="DarkBlue", dash='dot')),
row=1, col=1)
fig.show()
据我所知,没有直接的方法来编辑条形中标签的位置。 但是您可以轻松删除标签并使用自定义注释来代替:
完整代码:
from plotly import graph_objs as go
from plotly.subplots import make_subplots
meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
rlzd = [335101.3, 693658.5, 335101.3, 800019, 514379, 594379, 581279, 310029, 485022, 692091, 227918]
meta = [660756.5, 658980.9, 527478.1, 800019, 603574.5, 584198.7, 590098, 571476.2, 616965.7, 676205.1, 617237.94, 613634.7]
fig = make_subplots(rows=1, cols=2, column_widths=[0.85, 0.15], print_grid=True, horizontal_spacing=0.05)
fig.add_trace(go.Bar(
x=meses,y = rlzd,
text=rlzd,
textfont=dict(size=15,color='rgba(0,0,0,0)'),
textposition='outside',
name = 'Realizado',
showlegend=True),
row=1, col=1)
fig.add_trace(go.Scatter(
x=meses,y=meta,
name='Meta',
mode='markers+lines+text',
text=meta,
textfont=dict(size=13,color='black'),
textposition="top right",
marker_size=8,
showlegend=True,
line = go.scatter.Line(color="DarkBlue", dash='dot')),
row=1, col=1)
# you've got one more month than
# youve got elements in the list rlzd
# the following two lines takes that
# into consideration
length_diff = len(meses)-len(rlzd)
rlzd.extend(['']*length_diff)
# adds annotatoins for each month / bar
for i, m in enumerate(meses):
fig.add_annotation(dict(font=dict(color="white",size=12),
#x=x_loc,
x=i,
y=0.05,
showarrow=False,
text=rlzd[i],
textangle=-90,
xref="x",
yref="paper"
))
fig.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.