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

如何在关联的三个子图间添加带数学表达式文本的箭头?

实现带数学关联箭头的三子图布局

以下是基于Matplotlib的实现方案,可在同一画布中创建三个关联子图,并添加带数学表达式的箭头连接:

完整代码示例

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

# 启用LaTeX渲染数学表达式(可选,需系统安装LaTeX)
plt.rcParams['text.usetex'] = True
plt.rcParams['font.family'] = 'serif'

# 创建画布和自定义子图布局
fig = plt.figure(figsize=(12, 4))
gs = GridSpec(1, 3, figure=fig, wspace=0.4)  # 增大间距预留箭头空间

# 创建三个子图
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])

# ----------------------
# 子图内容(替换为你的实际可视化代码)
# ----------------------
# 子图A示例
ax1.plot([1,2,3], [2,4,3], color='tab:blue')
ax1.set_title('$A$')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')

# 子图B示例
ax2.bar([1,2,3], [5,3,4], color='tab:orange')
ax2.set_title('$B$')
ax2.set_xlabel('X')

# 子图C示例
ax3.scatter([1,2,3], [1,3,2], color='tab:green')
ax3.set_title('$C$')
ax3.set_xlabel('X')

# ----------------------
# 添加带数学表达式的箭头
# ----------------------
# A → B,标注$B = 2A + 1$
fig.annotate(
    r'$B = 2A + 1$',
    xy=(ax1.get_position().x1, ax1.get_position().y0 + ax1.get_position().height/2),
    xytext=(ax2.get_position().x0, ax2.get_position().y0 + ax2.get_position().height/2),
    arrowprops=dict(arrowstyle='->', color='black', lw=1.5),
    fontsize=12,
    ha='right', va='center'
)

# B → C,标注$C = \sqrt{B}$
fig.annotate(
    r'$C = \sqrt{B}$',
    xy=(ax2.get_position().x1, ax2.get_position().y0 + ax2.get_position().height/2),
    xytext=(ax3.get_position().x0, ax3.get_position().y0 + ax3.get_position().height/2),
    arrowprops=dict(arrowstyle='->', color='black', lw=1.5),
    fontsize=12,
    ha='right', va='center'
)

# A → C,标注$C = \sqrt{2A + 1}$
fig.annotate(
    r'$C = \sqrt{2A + 1}$',
    xy=(ax1.get_position().x1, ax1.get_position().y0 + ax1.get_position().height*0.2),
    xytext=(ax3.get_position().x0, ax3.get_position().y0 + ax3.get_position().height*0.8),
    arrowprops=dict(arrowstyle='->', color='gray', lw=1.2, linestyle='--'),
    fontsize=10,
    ha='right', va='center'
)

plt.tight_layout()
plt.show()

关键说明

  • 子图布局:使用GridSpec自定义子图间距,确保箭头有足够绘制空间
  • 数学表达式:通过LaTeX语法(r'$...$')实现专业数学符号渲染,若无需LaTeX,可改用普通文本或Matplotlib内置数学语法
  • 箭头控制:annotate()函数支持跨子图绘制箭头,通过获取子图的位置坐标(get_position())准确定位箭头起点和终点,arrowprops可自定义箭头样式(颜色、粗细、线型等)
  • 内容替换:将示例中的子图绘图代码(plot/bar/scatter)替换为你对应量A、B、C的可视化逻辑即可

内容的提问来源于stack exchange,提问作者Dr. Paprika

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:22:51