在Matplotlib中显示绘图之前获取空记号标签

2024-09-29 21:32:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到的问题与报告的问题类似。我不明白为什么勾号标签文本是空字符串:

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),如何在显示或保存绘图之前获取标签


Tags: textimportforgetlabelsplotasnp
1条回答
网友
1楼 · 发布于 2024-09-29 21:32:28

您已经正确地识别了问题:在调用plt.show()之前,没有显式设置任何内容。这是因为matplotlib避免了tick的静态定位,除非它必须这样做,因为您可能希望与它交互:例如,如果您可以ax.set_xlim()

在您的例子中,您可以使用fig.canvas.draw()绘制图形画布来触发tick定位,以便检索它们的值。

或者,您可以显式地设置xticks,然后将轴设置为FixedFormatterFixedLocator,并获得相同的结果。

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

相关问题 更多 >

    热门问题