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

如何在SageMath中绘制带标注点与箭头的实数轴

在SageMath中复刻TikZ风格的实数轴绘图

以下是实现你提供的TikZ代码效果的SageMath方案,可直接在Jupyter笔记本中运行:

# 定义参数,对应TikZ里的scale和bet
scale = 2
bet = 0.2
q = 1  # TikZ中\frac{\i}{q},这里默认q=1,可按需修改

# 创建基础绘图对象
g = Graphics()

# 1. 绘制实数轴
axis_length = scale * 3.5
g += line([(-axis_length, 0), (axis_length, 0)], color='black')

# 2. 绘制刻度、标注点及文字
for i in range(-3, 4):
    # 灰色刻度线和下方标注(对应TikZ里的\frac{\i}{q})
    tick_x = scale * i
    g += line([(tick_x, 0), (tick_x, -0.1)], color='gray')
    g += text(r"$\frac{%s}{%s}$" % (i, q), (tick_x, -0.2), fontsize=10)
    
    # 实心点和上方标注(对应TikZ里的\frac{\i}{q}+\beta)
    point_x = tick_x + scale * bet
    g += point((point_x, 0), size=40, color='black')
    g += text(r"$\frac{%s}{%s}+\beta$" % (i, q), (point_x, 0.2), fontsize=10)

# 3. 绘制双向弯曲箭头(i=-3,-2)
for i in range(-3, -1):
    start_x = scale*i + scale*bet
    end_x = scale*(i+1) + scale*bet
    # 用贝塞尔曲线绘制右弯弧线,添加双向箭头
    control = ((start_x + end_x)/2, -0.5)
    g += bezier([(start_x, 0.1), control, (end_x, 0.1)], color='black', arrows='<->', arrow_size=10)

# 4. 绘制单向弯曲箭头(从-1.6到0)
start_x = scale*(-1) + scale*bet
end_x = 0
control = ((start_x + end_x)/2, -0.5)
g += bezier([(start_x, 0.1), control, (end_x, 0.1)], color='black', arrows='->', arrow_size=10)

# 设置绘图范围,避免元素被裁剪
g.set_axes_range(-8, 8, -0.8, 0.8)
# 隐藏默认坐标轴,只保留自定义实数轴
g.show(axes=False)

代码说明

  • 参数定义:scale和bet完全对应TikZ里的同名变量,q对应公式中的分母,可根据需求调整。
  • 实数轴绘制:用line绘制从-scale*3.5到scale*3.5的水平线,还原TikZ的轴长。
  • 刻度与标注点:循环遍历i=-3到3,用line画灰色短刻度,text添加LaTeX格式的标注;用point绘制实心点,同步添加上方的公式标注。
  • 弯曲箭头:用bezier贝塞尔曲线实现右弯效果,通过下方控制点模拟TikZ的bend right;arrows参数设置箭头类型(<->双向,->单向)。
  • 绘图调整:set_axes_range确保所有元素在视图内,axes=False隐藏默认坐标轴,只保留自定义的实数轴。

内容的提问来源于stack exchange,提问作者H A Helfgott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:43:18