如何让Plotly Python中add_trace的文本显示在add_shape上方
问题描述
我用Plotly制作了一个包含矩形和文本的图表,发现通过add_trace添加的文本无法显示,但移除add_shape的填充色后就能看到文本。示例代码如下:
import plotly.graph_objects as go import numpy as np import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'score': [3, 4, 2], 'Exon_Number': ['Exon1', 'Exon2', 'Exon3'] }) fig = go.Figure() start = 0 for row in df.index: fig.add_shape(type="rect",x0=start, y0=1, x1=start+df['score'][row], y1=1.5,line=dict(color='green',),fillcolor='green',) start=start+df['score'][row]+2 fig.add_trace(go.Scatter(x=np.cumsum(list(df['score']+2))-df['score'][0],y=[1.25]*df.shape[0],mode="text",textfont=dict(family="sans serif",size=10,color="yellow"), text=list(df['Exon_Number']), showlegend=False,textposition='top center',)) fig.show()
请问如何让文本显示在矩形形状的上方?
解决方案
方法1:设置形状的图层为底层
Plotly默认将形状渲染在所有轨迹(trace)的上方,导致填充矩形挡住了文本。只需在add_shape时添加layer="below"参数,让矩形显示在文本下方:
for row in df.index: fig.add_shape( type="rect", x0=start, y0=1, x1=start+df['score'][row], y1=1.5, line=dict(color='green'), fillcolor='green', layer="below" # 让矩形处于底层 ) start=start+df['score'][row]+2
方法2:把文本移到矩形外部
如果不想调整图层,也可以将文本的y坐标设置到矩形范围之外(比如y=1.6),同时调整文本位置参数确保显示正确:
fig.add_trace(go.Scatter( x=np.cumsum(list(df['score']+2))-df['score'][0], y=[1.6]*df.shape[0], # y值大于矩形的y1=1.5,放在矩形上方 mode="text", textfont=dict(family="sans serif",size=10,color="yellow"), text=list(df['Exon_Number']), showlegend=False, textposition='middle center' # 文本居中显示 ))
方法3:调整文本位置到矩形外部区域
也可以保持文本y坐标不变,将textposition改为"outside top",强制文本显示在矩形的外部上方:
fig.add_trace(go.Scatter( x=np.cumsum(list(df['score']+2))-df['score'][0], y=[1.25]*df.shape[0], mode="text", textfont=dict(family="sans serif",size=10,color="yellow"), text=list(df['Exon_Number']), showlegend=False, textposition='outside top' # 文本显示在点的外部上方 ))
内容的提问来源于stack exchange,提问作者CKR
相关产品推荐
相关产品推荐

