![](/img/trans.png)
[英]Hiding major tick labels while showing minor tick labels in matplotlib
[英]Getting empty tick labels before showing a plot in Matplotlib
我遇到了与此处报告的问题类似的问题。 我不明白为什么刻度标签文本为空字符串:
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
列表已正确填充。 当然,现在要做任何更改都为时已晚。
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()
之前, plt.show()
明确设置任何内容。 这是因为matplotlib除非有必要,否则避免了刻度线的静态定位,因为您可能想与之交互:例如,如果可以ax.set_xlim()
。
在您的情况下,可以使用fig.canvas.draw()
绘制图形画布以触发刻度线定位,以便检索其值。
或者,您可以显式设置xticks,这将依次将轴设置为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.