Plotly柱状图末尾柱子注释文本被截断的修复方案咨询
Plotly柱状图最后一根柱子注释文本截断的修复方法
问题描述
使用Plotly绘制柱状图时,最后一根柱子的注释文本出现截断情况,示例截图如下:
相关代码
#!/usr/bin/env python3 import pandas as pd import re import datetime import os import plotly.graph_objects as go import numpy as np import math import datetime def save_fig(fig,pngname): fig.write_image(pngname,format="png", width=800, height=400, scale=1) print("[[%s]]"%pngname) return def plot_bars(df,pngname): colors = ['#5891ad','#004561','#ff6f31','#1c7685','#0f45a8','#4cdc8b','#0097a7'] fig = go.Figure() traces = [] xname = df.columns[0] for i,yname in enumerate(df.columns): if i == 0: continue trace1 = go.Bar( name=yname, x=df[xname],y=df[yname],meta=df.index, #texttemplate="%{%.1f}", text=df[yname], textposition="outside", textangle=-25, textfont_color="black", marker_color=colors[i-1], hovertemplate='<br>'.join([ 'id:%{meta}', 'ts: %{x|%H:%M:%S}', 'val: %{y:.1f}', ]), ) traces.append(trace1) fig.add_traces(traces) #d0 = df[xname][0].replace(minute=0, second=0) - datetime.timedelta(hours=1) fig.update_layout( margin=dict(l=10,t=40,r=10,b=40), plot_bgcolor='#ffffff',#'rgb(12,163,135)', paper_bgcolor='#ffffff', title="Boot progress", xaxis_title="Keypoints", yaxis_title="Timestamp(secs)", title_x=0.5, barmode='group', bargap=0.05, bargroupgap=0.0, legend=dict(x=.02,y=1), xaxis=dict( #tick0 = d0, #dtick=7200000, tickangle=-25, #tickmode='array', #tickvals = xvals, #ticktext= xtexts, #tickformat = '%m-%d %H:%M:%S',#datetime format showline=True, linecolor='black', color='black', linewidth=.5, ticks='outside', #mirror=True, ), yaxis=dict( dtick=10, showline=True, linecolor='black', color='black', linewidth=.5, #tickvals = yvals, #ticktext= ytexts, showgrid=True, gridcolor='#ececec', gridwidth=.5, griddash='solid',#'dot', zeroline=True, zerolinecolor='grey', zerolinewidth=.5, showticklabels=True, #mirror=True, ), ) anns = [] #anns = add_line(fig,anns,x0,y0,x1,y1,text=None) #add_anns(fig,anns) save_fig(fig,pngname) return def main(): data = [ ["A",10,12], ["B",12,11], ["C",14,13], ["D",16,15], ["E",18,19] ] df = pd.DataFrame(data,columns=["Kepoint","g1","g2"]) plot_bars(df,"demo.png") return main()
修复方案
方法一:增大右侧边距
截断的核心原因是图表右侧边距过小,注释文本超出了画布范围。只需在update_layout的margin参数中增大r(右侧边距)的值即可:
修改后的margin配置:
margin=dict(l=10,t=40,r=40,b=40),
这样能给右侧的注释文本留出足够的显示空间,避免被截断。
方法二:优化文本位置或角度(可选)
如果不想调整边距,也可以通过调整文本相关参数来避免截断:
- 将
textposition从"outside"改为"auto",让Plotly自动判断文本的最佳显示位置; - 减小
textangle的角度(比如从-25改为-15),减少文本横向占用的宽度。
修改后的Bar trace示例:
trace1 = go.Bar( name=yname, x=df[xname],y=df[yname],meta=df.index, text=df[yname], textposition="auto", # 自动调整位置 textangle=-15, # 减小倾斜角度 textfont_color="black", marker_color=colors[i-1], hovertemplate='<br>'.join([ 'id:%{meta}', 'ts: %{x|%H:%M:%S}', 'val: %{y:.1f}', ]), )
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

