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

