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

如何将Plotly散点图的默认标记替换为自定义SVG格式的棋子图标

实现方法

Plotly Express 的 symbol 参数仅支持内置预设标记,无法直接读取本地SVG文件作为散点图案,可通过plotly.graph_objects接口实现自定义棋子标记,参考代码如下:

import plotly.graph_objects as go
import base64

# 读取SVG文件并转为base64 URI供Plotly调用
def svg_to_base64(svg_path):
    with open(svg_path, "rb") as f:
        encoded = base64.b64encode(f.read()).decode()
    return f"data:image/svg+xml;base64,{encoded}"

# 初始化画布,配置坐标轴适配国际象棋棋盘比例
fig = go.Figure()
fig.update_layout(
    xaxis = dict(range=[0,9], tick0=1, dtick=1, constrain="domain"),
    yaxis = dict(range=[0,9], tick0=1, dtick=1, scaleanchor="x", scaleratio=1),
    width=600,
    height=600
)

# 预转所有SVG的base64编码,避免重复读取文件
icon_cache = {icon_path: svg_to_base64(icon_path) for icon_path in df_game["icon"].unique()}

# 按图标分组添加散点轨迹,每个分组使用对应的棋子图案
for icon_path, group_df in df_game.groupby("icon"):
    fig.add_trace(go.Scatter(
        x = group_df["x"],
        y = group_df["y"],
        mode = "markers",
        marker = dict(
            size = 45, # 可根据棋盘大小调整棋子尺寸
            opacity = 0.1, # 对应你原有代码的透明度设置
            symbol = f'url("{icon_cache[icon_path]}")'
        ),
        name = group_df["piece"].iloc[0] # 图例显示棋子类型
    ))

fig.show()

注意事项

  • 确保SVG文件的相对路径与代码运行的工作目录匹配,路径错误会导致标记无法加载
  • 可调整marker.size参数适配你的棋盘格子尺寸,保证棋子显示比例正常
  • 如果需要保留按颜色分组的逻辑,可在分组时增加color列作为分组维度,或在marker中添加color参数配置

内容的提问来源于stack exchange,提问作者Giraffes are Fake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:15:04