You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:12:37