如何在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
相关产品推荐
相关产品推荐

