我想用Python做一个绘图,让x范围以π的倍数显示刻度。
有没有一种好方法可以做到这一点,而不是手动?
我在考虑使用matplotlib,但其他选项也可以。
编辑3:EL_DON的解决方案对我来说是这样的:
import matplotlib.ticker as tck
import matplotlib.pyplot as plt
import numpy as np
f,ax=plt.subplots(figsize=(20,10))
x=np.linspace(-10*np.pi, 10*np.pi,1000)
y=np.sin(x)
ax.plot(x/np.pi,y)
ax.xaxis.set_major_formatter(tck.FormatStrFormatter('%g $\pi$'))
ax.xaxis.set_major_locator(tck.MultipleLocator(base=1.0))
plt.style.use("ggplot")
plt.show()
给出:
编辑2(已在编辑3中解决!):EL_DON的答案似乎不适合我:
import matplotlib.ticker as tck
import matplotlib.pyplot as plt
import numpy as np
f,ax=plt.subplots(figsize=(20,10))
x=np.linspace(-10*np.pi, 10*np.pi)
y=np.sin(x)
ax.plot(x/np.pi,y)
ax.xaxis.set_major_formatter(tck.FormatStrFormatter('%g $\pi$'))
ax.xaxis.set_major_locator(tck.MultipleLocator(base=1.0))
plt.style.use("ggplot")
plt.show()
给了我
这看起来真的不对
7条答案
按热度按时间0kjbasz61#
这是受Python Data Science Handbook的启发,虽然Sage尝试做without explicit parameters。
编辑:我已经将其概括为允许您提供分母、单位值和单位的LaTeX标签作为可选参数。如果您觉得有帮助,可以包含一个类定义。
这可以非常简单地使用,没有任何参数:
也可以用更复杂的方式使用:
bxfogqkk2#
我使用了以下答案中的信息:
xxls0lw83#
如果要避免在plot命令中将x除以pi,可以使用FuncFormatter而不是FormatStrFormatter对this answer进行微调:
给出了以下图像:
qgzx9mmu4#
π分数的解:
1.绘制函数:
1.修改栅格的范围,使其与pi值相对应:
1.更改轴标签:
pnwntuvh5#
x7yiwoj46#
我创建了一个PyPi Package,它创建了类似ScottCentoni的答案的格式化程序和定位器示例。
ilmyapht7#
下面是一个将浮点数转换为π分数的版本,只需使用您最喜欢的格式化程序,然后使用函数
convert_to_pi_fractions(ax, axis='x')
将它生成的浮点数值转换为π分数,函数convert_to_pi_fractions(ax, axis='x')
指定必须转换的脊柱(或both
),您将得到:由此得出: