提问人:Freya the Goddess 提问时间:10/13/2023 更新时间:10/13/2023 访问量:49
如何使用 Sympy 绘图将 x 轴刻度更改为 pi (π) 项 (Python 3)
How to change x-axis ticks into pi (π) terms with Sympy Plotting (Python 3)
问:
我有这个傅里叶计算,n=3、n=5 和 n=7。我想让 x 轴具有 pi 项的刻度(从 -4π 到 4π,增量可以调整,例如 π)。我在 SoF 上发现 x 轴可以更改为π项,但它们都使用 matplotlib 进行绘图,我的这段代码使用 Sympy 进行绘图。
The MWE:
# https://docs.sympy.org/latest/modules/series/fourier.html
from sympy import pi
import sympy as sm
x = sm.symbols("x")
# Computing Fourier Series
# This illustrates how truncating to the higher order gives better convergence.
g = x
s = sm.fourier_series(g, (x, -pi, pi))
print('')
print('Fourier series for f(x) = x over the interval (-π,π) : ')
sm.pretty_print(s)
s1 = s.truncate(n = 3)
s2 = s.truncate(n = 5)
s3 = s.truncate(n = 7)
print('')
print('Fourier series for f(x) = x over the interval (-π,π) with n=3 : ')
sm.pretty_print(s1)
print('')
print('Fourier series for f(x) = x over the interval (-π,π) with n=5 : ')
sm.pretty_print(s2)
print('')
print('Fourier series for f(x) = x over the interval (-π,π) with 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'
p.show()
答:
2赞
Davide_sd
10/13/2023
#1
我将使用 Sympy Plotting Backends,因为从绘图中提取轴更容易一些。
有了轴后,您可以使用 Matplotlib 方法将刻度更改为 pi 的倍数。有关更多方法,请参阅此问题。
import matplotlib.pyplot as plt
import numpy as np
from spb import *
r = (x, -4*pi, 4*pi)
p = graphics(
line(g, r, "x", line_color="g"),
line(s1, r, "n = 3", line_color="r"),
line(s2, r, "n = 5", line_color="b"),
line(s3, r, "n = 7", line_color="cyan"),
show=False, grid=False
)
ax = p.ax
ax.xaxis.set_major_formatter(plt.FuncFormatter(
lambda val,pos: '{:.0g}$\pi$'.format(val/np.pi) if val !=0 else '0'
))
ax.xaxis.set_major_locator(plt.MultipleLocator(base=np.pi))
plt.show()
我可能会在下周实施一个选项,以使这更容易。spb
评论
0赞
Freya the Goddess
10/15/2023
是的,非常感谢@Davide_sd,这将很有帮助,因为 x 轴在 pi 项或数学、物理和工程中经常需要的其他项中滴答作响
评论