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

如何在SymPy绘图(Python3)中将X轴刻度设为π形式

解决SymPy绘图X轴π刻度设置问题

SymPy的绘图功能基于Matplotlib实现,因此可以直接操作底层的Matplotlib轴对象来设置π相关的刻度。以下是修改后的完整代码:

from sympy import pi
import sympy as sm

x = sm.symbols("x")

# 计算傅里叶级数
g = x
s = sm.fourier_series(g, (x, -pi, pi))
print('')
print('f(x) = x在区间(-π,π)上的傅里叶级数: ')
sm.pretty_print(s)

s1 = s.truncate(n = 3)
s2 = s.truncate(n = 5)
s3 = s.truncate(n = 7)

print('')
print('n=3时的傅里叶级数: ')
sm.pretty_print(s1)
print('')
print('n=5时的傅里叶级数: ')
sm.pretty_print(s2)
print('')
print('n=7时的傅里叶级数: ')
sm.pretty_print(s3)

p = sm.plot(g, s1, s2, s3, (x, -4*pi, 4*pi), show=False, legend=True)

p[0].line_color = 'g'
p[0].label = 'x'

p[1].line_color = 'r'
p[1].label = 'n=3'

p[2].line_color = 'b'
p[2].label = 'n=5'

p[3].line_color = 'cyan'
p[3].label = 'n=7'

# 获取底层Matplotlib轴对象,设置π刻度
ax = p.backend.ax
# 生成刻度位置:-4π到4π,步长π
tick_positions = [i * sm.N(pi) for i in range(-4, 5)]
# 生成对应刻度标签
tick_labels = [f"{i}π" if i != 0 else "0" for i in range(-4, 5)]

ax.set_xticks(tick_positions)
ax.set_xticklabels(tick_labels)

p.show()

关键说明

  • 通过p.backend.ax获取SymPy绘图对应的Matplotlib轴实例,直接调用Matplotlib的刻度设置方法
  • sm.N(pi)将符号π转换为数值型,供Matplotlib识别刻度位置
  • 刻度标签根据位置生成,0位置单独显示为"0",其余显示为iπ格式

内容的提问来源于stack exchange,提问作者Freya the Goddess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:04:52