python - 在 Matplotlib 中显示绘图之前获取空刻度标签

标签 python python-3.x matplotlib label

我遇到了与报告的 here 类似的问题.我不明白为什么刻度标签文本是一个空字符串:

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 轴上显示了八个带标签的刻度。但是,如果我要求标签 after 我显示情节,那么 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()

在您的情况下,您可以使用 fig.canvas.draw() 绘制图形 Canvas 以触发刻度定位,因此您可以检索它们的值。

或者,您可以显式设置 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

关于python - 在 Matplotlib 中显示绘图之前获取空刻度标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122923/

相关文章:

python - 如何工作 "if np.array([False]):"

python - Python 中没有多行 Lambda : Why not?

python-3.x - TypeError: 'NoneType'对象在opencv中不可迭代

matplotlib - 在 stylelib 中使用 mathtext.fontset = 'custom' 时出错

python - 如何将图例标签添加为条形图注释?

python - AsyncHTTPTestCase Post 请求传递数据

python - 在守护进程模式下使用 mod_wsgi 在 Django 站点中导入错误

python 3 : module in same directory as script: "ImportError: No module named"

python-3.x - 为什么 spaCy 不像斯坦福 CoreNLP 那样在标记化过程中保留单词内连字符?

python - 向直方图线添加 0 个起始值和结束值 (matplotlib)