这是我在Python中运行的脚本:
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 2*np.pi, 150)
plt.figure()
theGrid = np.outer(np.sin(t), np.sin(t))
plt.xlim(0, 2*np.pi) #forces an exact fit!
plt.ylim(0, 2*np.pi) #ditto!
plt.xticks(np.linspace(0, 2*np.pi, 5))
plt.yticks(np.linspace(0, 2*np.pi, 5))
plt.pcolormesh(t, t, theGrid)
这是一个很好的情节,x和y标签显然都是pi / 2的倍数。但是,如何分别读取x,y标签,比如0,pi / 2,pi,3 * pi / 2和2 * pi,特别是文本的引入? (例如,数字np.pi / 2到文本“pi / 2”的映射应该不难,但获取文本标签基本上就是我在这里得到的。)
答案 0 :(得分:4)
实际上,你几乎就在那里。以下代码基于此post。 xticks和 yticks 的第一个输入是位置列表,而第二个输入是标签列表,可以是字符串。
我还使用Latex表示法来获取pi的希腊字母。
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 2*np.pi, 150)
plt.figure()
theGrid = np.outer(np.sin(t), np.sin(t))
plt.xlim(0, 2*np.pi) #forces an exact fit!
plt.ylim(0, 2*np.pi) #ditto!
plt.xticks(np.linspace(0, 2*np.pi, 5),['0','$\pi/2$','$\pi$','$3\pi/2$','$2\pi$'])
plt.yticks(np.linspace(0, 2*np.pi, 5),['0','$\pi/2$','$\pi$','$3\pi/2$','$2\pi$'])
plt.pcolormesh(t, t, theGrid)
答案 1 :(得分:0)
要将@ leal26的答案扩展为更灵活的内容(例如,如果我们想要缩放/平移图表),我们可以使用matplotlib.ticker
模块。
可以使用ax.xaxis.set_major_locator
(ax.yaxis.set_major_locator
)和ticker.MultipleLocator
使用base = pi/2
设置刻度线的位置。
然后我们可以使用ticker.FuncFormatter
设置刻度标签的格式(这次使用ax.xaxis.set_major_formatter
。我们必须考虑几个特殊情况(例如分子中的1和/或分母等。)请参阅下面的fracformat
函数。
另请注意,我们必须使用原始字符串(r
前缀)和双大括号来进行LaTeX格式化。
这里的真正优势在于我们可以轻松更改刻度线位置,绘图限制等,而无需每次都手动重新定义刻度标签。
最后,我还略微更改了您的脚本以使用matplotlib
的面向对象的方法,以便我们使用Figure
创建plt.figure
个实例,{ {1}}实例(Axes
)与ax
,然后对于其他所有内容,我们从fig.add_subplot
调用相关函数。
ax
我将绘图限制增加到import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from fractions import Fraction
t = np.linspace(0, 4*np.pi, 150)
fig = plt.figure()
ax = fig.add_subplot(111)
theGrid = np.outer(np.sin(t), np.sin(t))
ax.set_xlim(0, 4*np.pi) #forces an exact fit!
ax.set_ylim(0, 4*np.pi) #ditto!
def fracformat(x,pos):
frac = Fraction(x/np.pi)
if frac.numerator == 0:
return 0
elif frac.numerator == frac.denominator:
return r"$\pi$"
elif frac.numerator == 1:
return r"$\frac{{ \pi }}{{ {:2d} }}$".format(frac.denominator)
elif frac.denominator == 1:
return r"${:2d} \pi$".format(frac.numerator)
else:
return r"$\frac{{ {:2d} \pi }}{{ {:2d} }}$".format(frac.numerator,frac.denominator)
ax.xaxis.set_major_locator(ticker.MultipleLocator(np.pi/2.))
ax.yaxis.set_major_locator(ticker.MultipleLocator(np.pi/2.))
ax.xaxis.set_major_formatter(ticker.FuncFormatter(fracformat))
ax.yaxis.set_major_formatter(ticker.FuncFormatter(fracformat))
ax.pcolormesh(t, t, theGrid)
plt.show()
,以显示将此扩展到不同范围是多么容易,只需要很少的努力。