我遇到了与此处报告的问题类似的问题。我不明白为什么刻度标签文本为空字符串:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,2*np.pi,100) y = np.sin(x)**2 fig, ax = plt.subplots() ax.plot(x,y) labels = ax.get_xticklabels() for label in labels: print(label) plt.show()
输出:
Text(0,0,'') Text(0,0,'') Text(0,0,'') Text(0,0,'') Text(0,0,'') Text(0,0,'') Text(0,0,'') Text(0,0,'')
我得到的结果相同,ax.xaxis.get_ticklabels()但是绘制的图在保存或显示时在x轴上显示了八个带标记的刻度。但是,如果我 在 显示图 后 要求标签,则该labels列表已正确填充。当然,现在要做任何更改都为时已晚。
ax.xaxis.get_ticklabels()
labels
fig, ax = plt.subplots() ax.plot(x,y) plt.show() labels = ax.get_xticklabels() for label in labels: print(label)
Text(0,0,'0') Text(1,0,'1') Text(2,0,'2') Text(3,0,'3') Text(4,0,'4') Text(5,0,'5') Text(6,0,'6') Text(7,0,'7')
为什么会发生这种情况(Mac OS X Yosemite,Matplotlib 1.5.1),以及 在 显示或保存绘图 之前 如何获得标签?
您已正确确定问题所在:在致电之前,plt.show()未明确设置任何内容。这是因为matplotlib除非有必要,否则避免了刻度线的静态定位,因为您可能希望与其进行交互:ax.set_xlim()例如,如果可以的话。
plt.show()
ax.set_xlim()
在您的情况下,您可以使用绘制图形画布fig.canvas.draw()来触发刻度线定位,以便检索其值。
fig.canvas.draw()
或者,您可以显式设置xticks,这将依次将轴设置为FixedFormatter,FixedLocator并获得相同的结果。
FixedFormatter
FixedLocator
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,2*np.pi,100) y = np.sin(x)**2 fig, ax = plt.subplots() ax.plot(x,y) ax.set_xlim(0,6) # Must draw the canvas to position the ticks fig.canvas.draw() # Or Alternatively #ax.set_xticklabels(ax.get_xticks()) labels = ax.get_xticklabels() for label in labels: print(label.get_text()) plt.show() Out: 0 1 2 3 4 5 6