简体   繁体   English

Plotly:如何防止跟踪之间的文本重叠?

[英]Plotly: How to prevent text overlapping between traces?

I'm working with a bar chart and a scatter trace.我正在使用条形图和散点图。 I must show the values as text instead of using hover text.我必须将值显示为文本,而不是使用悬停文本。 I didn't find an answer reading the documentation.我没有找到阅读文档的答案。 Maybe you could help me!也许你能帮我!

It would be great if I could find a way to set the bars' text at the bottom of the bars.如果我能找到一种在条形底部设置条形文本的方法,那就太好了。

See my code and the plot below, thanks a lot!请参阅我的代码和下面的情节,非常感谢!

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()

在此处输入图片说明

To my knowledege there is no direct way to edit the position of the labels within the bars.据我所知,没有直接的方法来编辑条形中标签的位置。 But you can easily drop the labels and use customized annotations instead to get this:但是您可以轻松删除标签并使用自定义注释来代替:

在此处输入图片说明

Complete code:完整代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM