如何使用Plotly Graph Objects优雅绘制单端箭头?
Plotly Graph Objects 绘制单端箭头的优雅方案
你目前通过将坐标拉回(0,0)的方式会产生多余线段,以下两种更简洁的方法可以实现仅线段一端显示箭头:
方法一:使用go.Scatter精准控制箭头标记
通过给每个箭头单独创建Scatter trace,利用marker.opacity隐藏起点标记,仅在终点显示箭头符号:
import plotly.graph_objects as go fig_chips = go.Figure() # 绘制箭头:(0,0) → (1,1) fig_chips.add_trace(go.Scatter( x=[0, 1], y=[0, 1], mode="lines+markers", line=dict(color="#1f77b4"), marker=dict( size=10, symbol="arrow", # 设置箭头符号 angleref="previous", # 箭头方向指向前一个点(即从起点指向终点) color="#1f77b4", opacity=[0, 1] # 隐藏起点标记,显示终点箭头 ) )) # 绘制箭头:(0,0) → (2,1) fig_chips.add_trace(go.Scatter( x=[0, 2], y=[0, 1], mode="lines+markers", line=dict(color="#ff7f0e"), marker=dict( size=10, symbol="arrow", angleref="previous", color="#ff7f0e", opacity=[0, 1] ) )) # 绘制箭头:(1,0) → (1,1) fig_chips.add_trace(go.Scatter( x=[1, 1], y=[0, 1], mode="lines+markers", line=dict(color="#2ca02c"), marker=dict( size=10, symbol="arrow", angleref="previous", color="#2ca02c", opacity=[0, 1] ) )) fig_chips.show()
这种方式的优势是可以和其他Scatter类型的trace共享交互逻辑(比如hover提示、图例控制)。
方法二:使用layout.Shape绘制箭头(推荐)
Plotly的布局形状(Shape)原生支持线段箭头,无需借助marker,代码更简洁直观:
import plotly.graph_objects as go fig_chips = go.Figure() fig_chips.update_layout( shapes=[ # 箭头:(0,0) → (1,1) dict( type="line", x0=0, y0=0, x1=1, y1=1, line=dict(color="#1f77b4", width=2), arrowhead=2, # 箭头样式(可选1-4,数字越大箭头越宽) arrowsize=1.5 # 箭头大小比例 ), # 箭头:(0,0) → (2,1) dict( type="line", x0=0, y0=0, x1=2, y1=1, line=dict(color="#ff7f0e", width=2), arrowhead=2, arrowsize=1.5 ), # 箭头:(1,0) → (1,1) dict( type="line", x0=1, y0=0, x1=1, y1=1, line=dict(color="#2ca02c", width=2), arrowhead=2, arrowsize=1.5 ) ] ) fig_chips.show()
这种方式不需要创建多个trace,直接通过布局配置实现,适合批量绘制静态箭头。
内容的提问来源于stack exchange,提问作者henry
相关产品推荐
相关产品推荐

